WSE3 中的密码摘要身份验证
Password Digest authentication in WSE3
我能够实现方法 AuthenticateToken 并在给定密码为纯文本时对用户进行身份验证。
当给定的密码被散列(Passworddigest)时,是否可以对用户进行身份验证?如果是这样,请说明一下。提前致谢。
我找到了解决方案。是的,当 SOAP header 中的密码是 PasswordDigest 时,可以对用户进行身份验证。
AuthenticateToken 实现没有变化;纯文本和散列密码的实现是相同的(返回原始密码字符串)。
在调试过程中,我从 "Microsoft.Web.Services3.Security.Tokens.UsernameToken" "ComputePasswordDigest(byte[] nonce, DateTime created, string secret)" 方法中了解到以下行 object,导致问题无法计算正确的密码摘要。
byte[] bytes = Encoding.UTF8.GetBytes(XmlConvert.ToString(created.ToUniversalTime(), "yyyy-MM-ddTHH:mm:ssZ"));
我已经在本地定义了相同的方法,并将上面的行更改如下,以更改格式以包含毫秒 "yyyy-MM-ddTHH:mm:ss.fffZ"。
并从 object "Microsoft.Web.Services3.Security.Tokens.UsernameTokenManager" 实现 "VerifyHashedPassword(UsernameToken token, string authenticatedPassword)" 方法来调用我的本地方法而不是 "Microsoft.Web.Services3.Security.Tokens.UsernameToken"object 中的 "ComputePasswordDigest(byte[] nonce, DateTime created, string secret)" 方法。现在,它就像一个魅力。
byte[] bytes = Encoding.UTF8.GetBytes(XmlConvert.ToString(created.ToUniversalTime(), "yyyy-MM-ddTHH:mm:ss.fffZ"));
我能够实现方法 AuthenticateToken 并在给定密码为纯文本时对用户进行身份验证。
当给定的密码被散列(Passworddigest)时,是否可以对用户进行身份验证?如果是这样,请说明一下。提前致谢。
我找到了解决方案。是的,当 SOAP header 中的密码是 PasswordDigest 时,可以对用户进行身份验证。
AuthenticateToken 实现没有变化;纯文本和散列密码的实现是相同的(返回原始密码字符串)。
在调试过程中,我从 "Microsoft.Web.Services3.Security.Tokens.UsernameToken" "ComputePasswordDigest(byte[] nonce, DateTime created, string secret)" 方法中了解到以下行 object,导致问题无法计算正确的密码摘要。
byte[] bytes = Encoding.UTF8.GetBytes(XmlConvert.ToString(created.ToUniversalTime(), "yyyy-MM-ddTHH:mm:ssZ"));
我已经在本地定义了相同的方法,并将上面的行更改如下,以更改格式以包含毫秒 "yyyy-MM-ddTHH:mm:ss.fffZ"。
并从 object "Microsoft.Web.Services3.Security.Tokens.UsernameTokenManager" 实现 "VerifyHashedPassword(UsernameToken token, string authenticatedPassword)" 方法来调用我的本地方法而不是 "Microsoft.Web.Services3.Security.Tokens.UsernameToken"object 中的 "ComputePasswordDigest(byte[] nonce, DateTime created, string secret)" 方法。现在,它就像一个魅力。
byte[] bytes = Encoding.UTF8.GetBytes(XmlConvert.ToString(created.ToUniversalTime(), "yyyy-MM-ddTHH:mm:ss.fffZ"));