从UserNamePasswordValidator到Principal的变量

时间:2011-11-01 07:50:50

标签: c# .net wcf authentication authorization

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

我实现了自己的UserNamePasswordValidator.Validate方法,在此方法中我检查凭据,然后在我的customPrincipal中得到一个我需要的变量。

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

修改

有了它的工作,我必须实现以下自定义的东西:

  • CustomServiceCredentials
  • ServiceCredentialsSecurityTokenManager
  • UserNameSecurityTokenAuthenticator
  • UserNamePasswordValidator
  • - >使用带有返回值的自定义验证方法
  • AuthorizationPolicy

1 个答案:

答案 0 :(得分:0)

UserNamePasswordValidator仅用于检查凭据。你可能想要System.IdentityModel.Policy.IAuthorizationPolicy。请参阅this question的答案。

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