2014-03-27 4 views
1

DNOA를 사용하여 OAuth 2.0을 통해 Facebook 및 Google에 연결하려고합니다.DotNetOpenAuth Google에서의 OAuth 2.0 승인

같은 코드는 페이스 북과 협력하고 있지만, 구글

IAuthorizationState authorization = client.ProcessUserAuthorization(request); 
if (authorization == null) { 
    // Kick off authorization request 
    client.RequestUserAuthorization(openAuthClient.scope, new Uri(redirectUrl)); 
} 

문제는 왜 작동하지 않습니다?

2014-03-27 12:20:19,497 (GMT+9) [6] DEBUG DotNetOpenAuth.Messaging.Channel - Preparing to send AccessTokenAuthorizationCodeRequestC (2.0) message. 

2014-03-27 12:20:19,500 (GMT+9) [6] INFO DotNetOpenAuth.Messaging.Channel - Prepared outgoing AccessTokenAuthorizationCodeRequestC (2.0) message for https://accounts.google.com/o/oauth2/token: 

code: 4/sFMRXFQwkQR_I1BsKXIA-XRO0eid.MoM8z1Q_qZEdPvB8fYmgkJxxjiYDigI 
redirect_uri: http://test.almazcom.ru/asp/logon.aspx?Mode=OpenAuthLogon&Provider=google&Response=1&authuser=0&num_sessions=1&session_state=f1b3dbc278071954a1b03facd6d7053deac831f7..b3c2&prompt=none 
grant_type: authorization_code 
client_id: 514202796818.apps.googleusercontent.com 
client_secret: ******** 

2014-03-27 12:20:19,500 (GMT+9) [6] DEBUG DotNetOpenAuth.Messaging.Channel - Sending AccessTokenAuthorizationCodeRequestC request. 

2014-03-27 12:20:20,447 (GMT+9) [6] DEBUG DotNetOpenAuth.Http - HTTP POST https://accounts.google.com/o/oauth2/token 

2014-03-27 12:20:20,533 (GMT+9) [6] ERROR DotNetOpenAuth.Http - https://accounts.google.com/o/oauth2/token returned 400 BadRequest: Bad Request 

2014-03-27 12:20:20,533 (GMT+9) [6] DEBUG DotNetOpenAuth.Http - WebException from https://accounts.google.com/o/oauth2/token: 
{ 
"error" : "invalid_request" 
} 

가 그럼 난 매개 변수를 redirect_uri를 변경하고 수동으로 요청을 보내 :

나는 다음 DNOA 요청을 로깅을 시작하고 발견했다. 결과는 OK입니다! 내 Google 애플리케이션에서 리디렉션 uri 다음에 지정된 경우 : http://test.almazcom.ru/asp/logon.aspx?Mode=OpenAuthLogon&Provider=google&Response=1

사용자 권한 부여 (ProcessUserAuthorization 메소드) 중에 다른 uri를 변경하려면 어떻게해야합니까? 이 URI는 Google 애플리케이션 리디렉션 URI와 정확히 일치해야합니다. 다른 경우에는 내가 구글

에서 "INVALID_REQUEST"를 얻을
+0

누구도이 문제에 직면하지 않았습니까? –

답변

2

당신은 DNOA의 자신의가 구현을 만들 설정을 자동으로 상태를 설정하고 허용 중지하려면 사후 인증에 대한 정보를 저장하는

을 "상태"를 리디렉션 사용한다 IClientAuthorizationTracker

그리고 마지막으로 다음

oClient = New WebServerClient(MyAuthDesc) 
... 
oClient.AuthorizationTracker = New TokenManager 

(ProcessUserAuthorization()가 빵점을 반환 L/없음)

Dim owr As DotNetOpenAuth.Messaging.OutgoingWebResponse 
owr = oClient.PrepareRequestUserAuthorization(scopes:=sScope, returnTo:=Request.Url) 
oOAuthParams.Redirect = owr.Headers.Item("Location") & "&state=" & sReturnHere 

ProcessUserAuthorization이 성공하고 (내가 실제로 사기 억제하는 데 사용할 반환하는 데 사용하지 않는) 당신이 URL의 상태를 읽고 뭔가를 할 수있는 토큰을 다음 액세스 확인

는 어쨌든 위를 할 필요가 내가 세션 객체에게이 도움이

희망을 사용하지 않았다으로 DNOA 작동 얻을.