在UserNamePasswordValidator中存储自定义信息
我使用自定义的UserNamePasswordValidator在.NET 4上有一个WCF服务,使用SSL和邮件安全进行了保护。在UserNamePasswordValidator中存储自定义信息
UserNamePasswordValidator接收用户名和密码并将其传递给存储过程,该存储过程返回该用户名和密码的有效帐户令牌。
我的问题是,我不明白如何访问实际的Web服务中的帐户令牌。我怀疑我必须能够将标记添加到标头的某处,但OperationContext尚不存在于UserNamePasswordValidator中,并且在HttpContext上设置它失败,并显示“验证消息安全性时发生错误”。
从我的谷歌搜索看来,我必须实现IAuthorizationPolicy或IIdentity,但这两个都不能访问密码。
我认为很多服务都会使用用户名和密码并使用它来查找相关帐户。我是在过度复杂吗,还是我错过了一些明显的东西?
我结束了检查OperationContext.Current.ServiceSecurityContext.PrimaryIdentity,看看是否用户进行身份验证,然后就取回我从数据库中需要基于身份的名称的信息。这似乎工作得很好。
如果您想在验证时捕获附加信息(即:您的令牌),则需要实现自定义的UserNameSecurityTokenAuthenticator,而不仅仅是自定义的UserNamePasswordValidator。一个例子见http://www.neovolve.com/2008/04/07/wcf-security-getting-the-password-of-the-user/。