2015-02-03 7 views
0

AuthenticateToken 메서드를 구현하고 주어진 암호가 일반 텍스트 일 ​​때 사용자를 인증 할 수있었습니다.WSE3의 암호 다이제스트 인증

주어진 암호가 해시 (Passworddigest)되었을 때 사용자를 인증 할 수 있습니까? 그렇다면 약간의 빛을 비춰주십시오. 미리 감사드립니다.

답변

0

해결책을 찾았습니다. 예. SOAP 헤더의 비밀번호가 PasswordDigest 인 경우 사용자를 인증 할 수 있습니다.

AuthenticateToken 구현을 변경하지 않았습니다. 구현은 일반 텍스트와 해시 된 암호 모두에 대해 동일합니다 (원래 암호 문자열 반환).

디버깅 동안, I는 다음 줄 것을 알게 "ComputePasswordDigest (바이트 []이 논스, 생성 날짜 시간, 비밀 문자열)의""Microsoft.Web.Services3.Security.Tokens.UsernameToken" 객체 방법 이 문제로 인해 올바른 암호 다이제스트를 계산하지 못했습니다.

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

I 로컬 동일한 방법을 정의 밀리 "YYYY-MM-ISO 형식 : mm : ss.fffZ"를 포함하는 포맷을 변경하기 위해, 다음과 같이, 상기 라인 변경을.

그리고 구현 "VerifyHashedPassword (UsernameToken이 토큰을 문자열 authenticatedPassword)"객체 "Microsoft.Web.Services3.Security.Tokens.UsernameTokenManager"에서 방법 대신 "ComputePasswordDigest (바이트 내 로컬 메서드를 호출하는 [] nonce, DateTime 만든 문자열 보안) " 메서드 에서"Microsoft.Web.Services3.Security.Tokens.UsernameToken " 개체입니다. 자, 그것은 매력처럼 작동합니다.

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