WSE3中的密码摘要认证

时间:2015-02-03 22:14:09

标签: asmx password-encryption wse3.0

我能够实现AuthenticateToken方法,并在给定密码为纯文本时对用户进行身份验证。

当给定密码经过哈希处理(Passworddigest)时,是否可以对用户进行身份验证?如果是这样,请说清楚。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。是的,当SOAP标头中的密码为PasswordDigest时,可以对用户进行身份验证。

AuthenticateToken实现没有变化;纯文本和散列密码的实现相同(返回原始密码字符串)。

在调试过程中,我从“Microsoft.Web.Services3.Security”中了解到“ComputePasswordDigest(byte [] nonce,DateTime created,string secret)方法中的以下行。 Tokens.UsernameToken“对象导致问题无法计算正确的密码摘要。

byte[] bytes = Encoding.UTF8.GetBytes(XmlConvert.ToString(created.ToUniversalTime(), "yyyy-MM-ddTHH:mm:ssZ"));

我已在本地定义了相同的方法并更改了上面的行,如下所示将格式更改为包括毫秒“yyyy-MM-ddTHH:mm:ss.fffZ”

从对象“Microsoft.Web.Services3.Security.Tokens.UsernameTokenManager”实施“VerifyHashedPassword(UsernameToken token,string authenticatedPassword)”方法来调用我的本地方法而不是来自“Microsoft.Web.Services3.Security.Tokens.UsernameToken”对象的“ComputePasswordDigest(byte [] nonce,DateTime created,string secret)方法。现在,它就像一个魅力。

byte[] bytes = Encoding.UTF8.GetBytes(XmlConvert.ToString(created.ToUniversalTime(), "yyyy-MM-ddTHH:mm:ss.fffZ"));