请问怎样在.NET Remoting中支持自定义的用户认证?我试了好几种方法,都不理想

ATField 2003-09-04 11:32:43
我正在使用.NET Remoting开发一个分布式的图书管理程序,
在支持用户认证的时候遇到了问题
用户信息放在Sql Server里面。
服务器向客户暴露一些.NET Remoting Object
假设我有一个对象
class LoginSystem : MarshalByRefObject
{
public void Login( string name, string pass );
}
当用户调用这个方法的时候就可以登录
如果用户没有调用这个方法的时候,调用其他对象的方法就会出错
我找不到保存登录信息的地方
我起初想使用CallContext,但是试验后发现CallContext的内容过一阵子会丢失
后来想定义个public static Hashtable hashtable = new Hashtable();
使用这个hashtable来保存每个客户的登录信息,但是又没有好的方法来区分客户
总不能在每个方法调用中都加上客户信息把,RemotingConfiguration.ApplicationID也不行
使用有状态的对象又存在租借周期问题
我真的不知道怎么办了
请教高手

...全文
102 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2003-09-05
  • 打赏
  • 举报
回复
checking the authentication in every method is bad, considering to write a custom channel sink and pass around an authentication ticket

see
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconremotingexamplechannelsinkprovider.asp

or to develop a full-blown custom authentication:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/remsspi.asp?frame=true

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/remsec.asp?frame=true

JGTM2000 2003-09-05
  • 打赏
  • 举报
回复
既然你这么设计了,那么只好从成功的Login中返回一个值(俗称ticket),而在所有方法中都带上这个值作为一个参数,每次客户带着ticket进行方法调用时函数内部对值进行合法性验证即可。ticket的设计直接影响安全性,最好在里面藏入可以区别客户端特征的数值(如IP等),具体可以参考System.Web.Security.FormsAuthentication.FormsAuthenticationTicket。
速马 2003-09-04
  • 打赏
  • 举报
回复
gz

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧