我能够实现AuthenticateToken方法,并在给定密码为纯文本时对用户进行身份验证。
当给定密码经过哈希处理(Passworddigest)时,是否可以对用户进行身份验证?如果是这样,请说清楚。提前谢谢。
答案 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"));