2011-12-20 6 views
1

oauth를 지원하는 앱을 제작할 때 필자가 사용하고 있습니다. 내가 트위터와 함께 문제를 발견하지 못했지만, 나는 문제가 페이스 북을 ... 사용하는 경우 스크라이브 관련 Oauth 문제

는 트위터의 OAuth에서 작동하는 코드입니다 그것은 두 번째 줄에 나에게 오류를 제공

OAuthService s = /* ... Facebook oauth init ... */ 
final Token requestToken = s.getRequestToken(); 
final String authURL = s.getAuthorizationUrl(requestToken); 

:

12-20 10:01:31.475: E/AndroidRuntime(5405): java.lang.UnsupportedOperationException: Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there 
12-20 10:01:31.475: E/AndroidRuntime(5405):  at org.scribe.oauth.OAuth20ServiceImpl.getRequestToken(OAuth20ServiceImpl.java:45) 

나는 그것이 내가 getAuthorizationUrl를 사용할 수 있다고 알고 ...하지만 나는 requestToken을 통과해야 ...

당신이 좀 도와 주 시겠어요?

그것은 스크와 페이스 북

덕분에 어떤 예를 도움이 될 것입니다!

추신 : Windows Live!와 동일한 문제가 발생합니다. = (

편집 :

나는 스크 라이브러리의 소스 코드를 찾고있다 그리고 나는 우리가 전합니다 (getAuthorizationUrl를 호출 할 수 있음을 볼 수 있습니다 여기에

https://github.com/fernandezpablo85/scribe-java/blob/master/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java

뭔가

를 발견 .. .) 그것을 사용하지 않기 때문에 null 매개 변수. ...하지만 지금은 prioblem 설정이 채워지지 않은 것 같아요 ...

여기는 어떻게 페이스 북 서비스를 초기화합니까 :

new ServiceBuilder() 
    .provider(FacebookApi.class) 
    .apiKey(....) 
    .apiSecret(....) 
    .scope("email,offline_access") 
    .callback("oauth://facebook") 
    .build(); 

이 정보가 맞습니까?

감사합니다.

+0

페이스 북의 OAuth 버전 2가, 트위터는 당신이 그 차이를 알아 OAuth를 1을 사용합니다? –

+0

나는 그것을 안다. .. 그리고 나는 그것이 문제 다라고 생각했다. .. 그러나 나는 차이를 정말로 잘 모르고있다. .. –

+0

당신은 2 개의 프로토콜을 잘못 잡았다, 나의 대답을 아래에 보라. –

답변

7
private static final Token EMPTY_TOKEN = null; 

OAuthService service = new ServiceBuilder() 
          .provider(FacebookApi.class) 
          .apiKey(apiKey) 
          .apiSecret(apiSecret) 
          .callback("http://www.example.com/oauth_callback/") 
           .build(); 
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); 

지금이 URL로 사용자를 리디렉션 그를 facebok에서 코드를 얻기 위해 그들에게 자신을 확인하게 할 필요.

거의 모든 주요 선서 시스템 여기

을 위해 아주 좋은 문서와 예제의 좋은 금액을 수 있습니다 페이스 북

모든 주요 공급자에 대한

FacebookExample

입니다 Scribe Example Directory

수정

토론을보고 나서 Oauth1 및 Oauth2에 대한 완전한 이해를 얻는 것이 좋습니다.

+0

아마 이것은 Scribe 측에서 작은 실수 일 것입니다. 'getRequestToken'의 OAuth 2 구현으로부터 null를 돌려 줄뿐입니다. –

7

모두 잘못되었습니다. OAuth 2 프로토콜은 OAuth 1과 같은 요청 토큰을 반환하지 않습니다.

Oauth 1은 승인되지 않은 요청 토큰을 반환합니다. 그런 다음 승인되지 않은 토큰에 권한이 부여 된 토큰 (2 개의 HTTP 호출)을 받도록 승인해야합니다.

Oauth 2는 요청 토큰 흐름이 없으므로 승인 토큰 (HTTP 호출 만 1 개)에 대해 HTTP GET을 수행해야합니다. 따라서 Scribe가 getAuthorizedUrl에 전화해야한다고 말한 이유는 무엇입니까?

Facebook Example은 OAuth를 2를 사용하여 인증 된 토큰을 검색하는 방법을보고,보기