UsernamePasswordValidator

UsernamePasswordValidator

我有一个带有netTcp绑定(消息-用户名)的WCF服务。

我实现了自己的UserNamePasswordValidator.Validate方法,在该方法中,我检查了凭据,然后在那里获得了一个变量,以后我在customPrincipal中需要它。

我现在的问题是,如何从UserNamePasswordValidator到customPrincipal中获取此变量?

编辑

得到它的工作,我不得不实现以下自定义的东西:


CustomServiceCredentials
ServiceCredentialsSecurityTokenManager
UserNameSecurityTokenAuthenticator
UserNamePasswordValidator
->具有返回值的自定义验证方法
授权政策

最佳答案

UserNamePasswordValidator旨在仅检查凭据。您可能需要System.IdentityModel.Policy.IAuthorizationPolicy。请参见this question的答案。

更新:问题是OperationContextUserNamePasswordValidator中尚不可用,因此您不能使用它将上下文变量传递到能够实例化自定义主体(IAuthorizationPolicy)的位置。因此,我将创建一个可用于自定义UserNamePasswordValidatorIAuthorizationPolicy实现的,带有用户名(值是您的身份验证方法,如果我正确的话)的静态字典。如果您使用的是.NET 4 ConcurrentDictionary,因为您需要处理并发性。因此,您的验证器将在字典中插入/更新用户名/身份验证方法对,您的IAuthorizationPolicy类将通过用户名(您可以从EvaluationContext获取它)来抓取它,然后重新实例化主体。不幸的是,我无法想象更优雅的解决方案(如果有)。

关于c# - 从UserNamePasswordValidator到Principal的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7963742/

10-10 08:06