使用会话 ID 的 WCF 自定义身份验证
WCF custom auth using session id
我需要在现有的 WCF 服务上创建一个自定义 authentication/authorization,这应该是每个方法:一些方法应该强制用户登录,而其他方法应该允许匿名使用。该服务作为单例实现。
为此,我想执行以下操作:
- 启用具有默认行为的会话,因此每个现有服务方法都将在不存在的情况下启动会话;
- 添加 login(userName, password) 方法,它将在
Dictionary<>
周围的包装器中保存成功的登录工件,当前会话 ID 用作键;
- 添加
logout()
关闭会话并从字典中删除人工制品的方法;
- 添加会话监视器,它将使用
Dictionary<SessionId, WeakReference<OperationContext.Current>>
删除未调用 logout()
方法的会话。每次添加新会话时都会执行监视器。
虽然有两个问题:
- 有没有更简单的方法实现per-method auth?
- 这种方法有什么问题吗?
对于自定义授权,您应该使用 Custom Authorization Manager。您应该使用 ASP.net 管理会话,如果启用 AspNet 兼容性,您可以访问它。
我前几天遇到了类似的问题,我找到了解决方法。
您可以查看是否需要;
我需要在现有的 WCF 服务上创建一个自定义 authentication/authorization,这应该是每个方法:一些方法应该强制用户登录,而其他方法应该允许匿名使用。该服务作为单例实现。
为此,我想执行以下操作:
- 启用具有默认行为的会话,因此每个现有服务方法都将在不存在的情况下启动会话;
- 添加 login(userName, password) 方法,它将在
Dictionary<>
周围的包装器中保存成功的登录工件,当前会话 ID 用作键; - 添加
logout()
关闭会话并从字典中删除人工制品的方法; - 添加会话监视器,它将使用
Dictionary<SessionId, WeakReference<OperationContext.Current>>
删除未调用logout()
方法的会话。每次添加新会话时都会执行监视器。
虽然有两个问题:
- 有没有更简单的方法实现per-method auth?
- 这种方法有什么问题吗?
对于自定义授权,您应该使用 Custom Authorization Manager。您应该使用 ASP.net 管理会话,如果启用 AspNet 兼容性,您可以访问它。
我前几天遇到了类似的问题,我找到了解决方法。
您可以查看是否需要;