2

我在 .NET 4 上有一个带有自定义 UserNamePasswordValidator 的 WCF 服务,通过 SSL 和消息安全保护。

UserNamePasswordValidator 接收用户名和密码并将其传递给一个存储过程,该过程返回该用户名和密码的有效帐户令牌。

我的问题是我不明白如何在实际的 Web 服务中访问该帐户令牌。我怀疑我必须能够将令牌添加到某处的标头中,但 UserNamePasswordValidator 中尚不存在 OperationContext 并且在 HttpContext 上设置它失败并显示“验证消息安全性时发生错误”。

从我的谷歌搜索来看,我似乎必须实现 IAuthorizationPolicy 或 IIdentity,但它们都无法访问密码。

我认为许多服务会采用用户名和密码并使用它来查找相关帐户。我是不是把它复杂化了,还是我只是错过了一些明显的东西?

4

2 回答 2

2

如果您想在身份验证时捕获其他信息(即:您的令牌),则需要实现自定义 UserNameSecurityTokenAuthenticator,而不仅仅是自定义 UserNamePasswordValidator。有关示例,请参见http://www.neovolve.com/2008/04/07/wcf-security-getting-the-password-of-the-user/ 。

于 2013-03-20T13:19:27.720 回答
1

我最终检查了 OperationContext.Current.ServiceSecurityContext.PrimaryIdentity 以查看用户是否已通过身份验证,然后仅根据身份名称从数据库中检索我需要的信息。这似乎工作得很好。

于 2013-12-19T12:59:31.397 回答