2010-01-16 4 views
1

서버에서 좋은 oauth_verifier 값을 수신했지만 ProcessUserAuthorization access_token 엔드 포인트를 통해 전달되지 않습니다.oauth_verifier가 DotNetOpenAuth의 웹 컨스 롤러를 사용하여 전달되지 않았습니다.

저는 DotNetOpenAuth 3.3.1 및 WebConsumer 구현을 사용하고 있습니다. 내가 사용하고있는 서버가 1.0.1이 아닌 OAuth 1.0a를 사용하고 있습니다.

1.0a를 사용하려면 DotNetOpenAuth를 강제로 수행해야합니까? 로그를 보면

2010-01-16 13:19:44,343 [5] DEBUG DotNetOpenAuth.Messaging.Channel [(null)] <(null)> - After binding element processing, the received UserAuthorizationResponse (1.0.1) message is: 
    oauth_verifier: dEz9lE9AA1gcdr6oCbmD 
    oauth_token: vauHNVOCITlbGCuqycWn 

2010-01-16 13:19:44,346 [5] DEBUG DotNetOpenAuth.Messaging.Channel [(null)] <(null)> - Preparing to send AuthorizedTokenRequest (1.0) message. 
2010-01-16 13:19:44,346 [5] DEBUG DotNetOpenAuth.Messaging.Bindings [(null)] <(null)> - Binding element DotNetOpenAuth.OAuth.ChannelElements.OAuthHttpMethodBindingElement applied to message. 
2010-01-16 13:19:44,346 [5] DEBUG DotNetOpenAuth.Messaging.Bindings [(null)] <(null)> - Binding element DotNetOpenAuth.Messaging.Bindings.StandardReplayProtectionBindingElement applied to message. 
2010-01-16 13:19:44,346 [5] DEBUG DotNetOpenAuth.Messaging.Bindings [(null)] <(null)> - Binding element DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement applied to message. 
2010-01-16 13:19:44,346 [5] DEBUG DotNetOpenAuth.Messaging.Channel [(null)] <(null)> - Applying secrets to message to prepare for signing or signature verification. 
2010-01-16 13:19:44,348 [5] DEBUG DotNetOpenAuth.Messaging.Bindings [(null)] <(null)> - Signing AuthorizedTokenRequest message using HMAC-SHA1. 
2010-01-16 13:19:44,349 [5] DEBUG DotNetOpenAuth.Messaging.Bindings [(null)] <(null)> - Constructed signature base string: GET&http%3A%2F%2Fx-staging.indivo.org%3A8000%2Foauth%2Faccess_token&oauth_consumer_key%3Doak%26oauth_nonce%3DgPersiZV%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1263676784%26oauth_token%3DvauHNVOCITlbGCuqycWn%26oauth_version%3D1.0 
2010-01-16 13:19:44,349 [5] DEBUG DotNetOpenAuth.Messaging.Bindings [(null)] <(null)> - Binding element DotNetOpenAuth.OAuth.ChannelElements.SigningBindingElementChain applied to message. 
2010-01-16 13:19:44,351 [5] INFO DotNetOpenAuth.Messaging.Channel [(null)] <(null)> - Prepared outgoing AuthorizedTokenRequest (1.0) message for http://x-staging.indivo.org:8000/oauth/access_token: 
    oauth_token: vauHNVOCITlbGCuqycWn 
    oauth_consumer_key: XXXXXXmyComsumerKeyXXXXXX 
    oauth_nonce: gPersiZV 
    oauth_signature_method: HMAC-SHA1 
    oauth_signature: xNynvr2oFlqtdoOKOl2ETiiTLGY= 
    oauth_version: 1.0 
    oauth_timestamp: 1263676784 

2010-01-16 13:19:44,351 [5] DEBUG DotNetOpenAuth.Messaging.Channel [(null)] <(null)> - Sending AuthorizedTokenRequest request. 
2010-01-16 13:19:44,351 [5] DEBUG DotNetOpenAuth.Http [(null)] <(null)> - HTTP GET http://x-staging.indivo.org:8000/oauth/access_token 
2010-01-16 13:20:34,657 [5] ERROR DotNetOpenAuth.Http [(null)] <(null)> - WebException from http://x-staging.indivo.org:8000/oauth/access_token: 
<h4>Internal Server Error</h4> 

A pastebin link to the log4net log

+0

log4net 로그를 포함 할 수 있습니까? 그 과정이 어떻게 진행되고 있는지 알 수 있습니까? –

+0

@Andrew, 로그 파일 링크를 읽을 수없는 경우 알려주십시오. 내가 이해하기 때문에 oauth_verifier가 AccessTokenEndpoint에 전달되었지만 서버가 보이지 않는다. – BozoJoe

+0

DotNetOpenAuth는 지원하지 않는 Version 개체를 사용하기 때문에 1.0.1을 1.0.1로 사용한다. 버전의 글자이므로 문제가되지 않습니다. –

답변

1

, 당신은 DotNetOpenAuth이 검증 메시지를 수신하고 로그라는 1.0A 메시지로 인식 것을 볼 수 있습니다 "UserAuthorizationResponse을받은 (1.0.1)" (1.0.1은 DNOA가 1.0a를 말하는 방식이므로).

또한 로그에서 DNOA가 "AuthorizedTokenRequest (1.0)"메시지를 보냅니다. 이는 ProtocolVersion 속성을 사용하여 WebConsumer 인스턴스로 전달한 ServiceProviderDescription 개체가 대신 V10으로 설정되어 있음을 나타냅니다.

당신 먼저 서비스 공급자로 사용자를 보낼 때 올바르게 ServiceProviderDescription을 초기화하지만 WebConsumer.ProcessAuthorization를 호출 할 때 버전 번호 두 번째 시간을 설정하지 않고 그것을 초기화 할 수있다.

서비스 공급자가 OAuth 1.0a 사양을 위반하고 DotNetOpenAuth가이를 감지하여 사용자 설정을 무시하고 서비스 제공 업체를 단지 OAuth 1.0 서비스 공급자로 취급하기로 결정할 수도 있습니다. 이 상황이 발생하면 자신의 ServiceProviderDescription 객체의 ProtocolVersion 속성이 1.0.1에서 1.0으로 변경되고 로그에이 하위 문자열 인 '엔드 포인트에서 예상 OAuth 서비스 공급자'가 표시됩니다.

+0

이 메시지 >> OAuth 1.0.1을 사용하지만 1.0을 사용하는 끝점 DotNetOpenAuth.Messaging.MessageReceivingEndpoint의 예상 OAuth 서비스 공급자가 감지되었습니다. 서비스 설명을 새 버전으로 조정. << 은 SP가 1.0a 사양을 위반하고 있다고 말하고 있습니까? 그와 함께 살 수 있고, 여전히 검증자를 AccessTokenEndpoint로 돌려 보낼 수 있습니까? – BozoJoe

+0

Andrew에게 감사드립니다. SP는 oauth_callback_confirmed를 지정하지 않고 요청 토큰에 응답하고 있습니다. 1.0 버전으로 다시 밀어 넣은 것 같습니다. ProcessUserAuthorization()을 수행하기 전에 버전을 1.0a로 강제 변경하고 변경 사항은 본문에 검증자를 전송합니다. – BozoJoe

+0

차가움. 해결 방법을 찾았 기 때문에 기쁩니다. 나는 SP 녀석들에게 이메일을 보내 그들이 버그가 있다고 말해주기를 바랍니다. –

관련 문제