我有一个带有 netTcp 绑定(bind)(消息 - 用户名)的 WCF 服务。
我实现了我自己的 UserNamePasswordValidator.Validate 方法,在这个方法中我检查了凭据并在那里我得到了一个变量,稍后我需要在我的 customPrincipal 中使用它。
我现在的问题是,如何将这个变量从我的 UserNamePasswordValidator 获取到 customPrincipal?
编辑
让它工作,我必须实现以下自定义的东西:
- 自定义服务凭证
- ServiceCredentialsSecurityTokenManager
- 用户名SecurityTokenAuthenticator
- 用户名密码验证器
- -> 使用带返回值的自定义验证方法
- 授权政策
最佳答案
UserNamePasswordValidator 仅用于检查凭据。您可能需要 System.IdentityModel.Policy.IAuthorizationPolicy
。查看 this question 的答案.
更新:问题是 OperationContext
在 UserNamePasswordValidator
中尚不可用,因此您不能使用它来将上下文变量传递给您可以实例化自定义主体 (IAuthorizationPolicy
) 的位置。因此,我将创建一个以用户名为键的静态字典(如果我没看错的话,值是您的身份验证方法)可用于自定义 UserNamePasswordValidator
和 IAuthorizationPolicy
实现。如果您使用的是 .NET 4,ConcurrentDictionary
是正确的选择,因为您需要处理并发问题。所以你的验证器将插入/更新用户名/auth-method 对到字典中,你的 IAuthorizationPolicy
类将通过用户名获取它(你可以从 EvaluationContext
获得它)并重新 -实例化主体。不幸的是,我无法想象更优雅的解决方案(如果有的话)。
关于c# - 从 UserNamePasswordValidator 到 Principal 的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963742/