칸 아카데미 API에 대한 OAuth 플로우를 이해하는 데 도움을 줄 수있는 사람이 누구나 있습니다. 다음 링크를 통해 액세스 할 수 있습니다. https://github.com/Khan/khan-api/wiki/Khan-Academy-API-Authentication이 API에 대한 OAuth 플로우를 알 수 없음
필자는 Scribe를 사용하고 있습니다. 여기
는 작업 코드 :
OAuthService serv = new ServiceBuilder().provider(KhanApi.class)
.apiKey("").apiSecret("")
.build();
Token token = new Token("", "");
OAuthRequest req = new OAuthRequest(Verb.GET,
"http://www.khanacademy.org/api/auth/request_token");
serv.signRequest(token, req);
Response resp = req.send();
System.out.println(resp.getBody());
하면 해당 페이지로 사용자를 리디렉션하는 데 필요한 응답을 얻을 후. 그런 다음 요청 토큰이 포함 된 URL로 응답 성공적으로 로그인 한 브라우저 ... 여기
내가 시도하고 잘 작동하고 그 결과를하지 않은 두 개의 서로 다른 것들 후 :
을1)
OAuthService serv = new ServiceBuilder().provider(KhanApi.class)
.apiKey("***").apiSecret("***")
.build();
Token token = serv.getRequestToken();
결과는 다음과 같습니다 스레드에서
예외는 "주요"org.scribe.exceptions.OAuthException : 응답 본체가 올바르지 않습니다. 이에서 토큰 비밀 추출 할 수 없습니다
<!DOCTYPE html>
<html>
<head>
<title>Login to Khan Academy</title>
<style>
#login-page {
padding-top: 18px;
}
.providers {
height: 100px;
}
.providers .provider .img-container {
height: 80px;
}
.horizontal-separator .separator-text {
background-color: white;
margin-left: 185px;
}
.pw-login {
width: 415px;
height: auto;
text-align: right;
}
.pw-login img.tree {
float: left;
}
</style>
</head>
<body>
<article id="login-page">
<div id="login-inner-content">
<form method="POST"
class="auth-form"
id="login-form"
action="https://khan-academy.appspot.com/login/mobileoauth">
<h3>Login to Khan Academy</h3>
<input type="hidden" name="oauth_map_id" value="889298340">
<input type="hidden" name="view" value="normal">
<ul class="providers">
<li class="provider action-gradient" title="Google">
</div>
</article>
</body>
</html>'
at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:41)
at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:27)
at org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:52)
at com.saeid.scribe.oauth.Main.main(Main.java:117)
응답이 깨진 HTML 파일의 문자열 (이미지가 표시되지 않는 것을 의미에서 깨진 ...)
2) . 또한 나는 시도 :
OAuthRequest req = new OAuthRequest(Verb.GET,
"http://www.khanacademy.org/api/auth/request_token");
Map<String, String> parameters = generateParameters("GET",
"http://www.khanacademy.org/api/auth/request_token");
req.addQuerystringParameter("oauth_consumer_key", parameters.get("oauth_consumer_key"));
req.addQuerystringParameter("oauth_nonce", parameters.get("oauth_nonce"));
req.addQuerystringParameter("oauth_signature", parameters.get("oauth_signature"));
req.addQuerystringParameter("oauth_signature_method", parameters.get("oauth_signature_method"));
req.addQuerystringParameter("oauth_timestamp", parameters.get("oauth_timestamp"));
req.addQuerystringParameter("oauth_version", parameters.get("oauth_version"));
Response res = req.send();
결과는 다음과 내가 같은 바를 사용하고
OAuth error. Invalid signature. Expected signature base string: GET&http%3A%2F%2Fwww.khanacademy.org%2Fapi%2Fauth%2Frequest_token&oauth_consumer_key%3D***********%26oauth_nonce%3D1341526030%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1341526030%26oauth_version%3D1.0
se 문자열을 사용하여 서명을 생성하고 HMAC-SHA1 메서드의 키로 소비자 키를 사용하고 있습니다.
다음은 KhanAPI의 모양입니다. import org.scribe.builder.api.DefaultApi10a; import org.scribe.model.Token;
공용 클래스 KhanApi는 DefaultApi10a {
@Override
public String getAccessTokenEndpoint() {
return "http://www.khanacademy.org/api/auth/access_token";
}
@Override
public String getAuthorizationUrl(Token arg0) {
return "";
}
@Override
public String getRequestTokenEndpoint() {
return "http://www.khanacademy.org/api/auth/request_token";
}
}
는아무도 나를 도와 줄 수 을 확장? 감사합니다.
답장을 보내 주셔서 감사합니다. 네 말이 맞아요, 나는 또한 서기를 시험해 보았습니다.문제는 API 공급자가 API 클래스를 구현하는 데 필요한 authenticationURL을 제공하지 않는다는 것입니다. API의 맹세 흐름을 살펴보고 이해가 무엇인지 알려주시겠습니까? –
API 공급자가 2-legged Oauth 만 지원한다고 말하고 있습니까? 그렇다면 Scribe가 (쉽게) 지원한다고 생각하지 않습니다. OAuth 2.0에 서명이 필요하지 않은 이유를 직접 경험하고 있습니다. –
2 피트가되어야한다고 생각합니다. 단지 초보자이긴하지만 확실하지 않습니다. 다음은 흐름입니다. 사용자를 consumer_key, oauth_signatuer와 같은 매개 변수를 사용하여 URL로 리디렉션해야합니다. 그런 다음 사용자가 웹 페이지로 리디렉션해야 사용자가 기밀 정보를 입력 할 수 있습니다. 브라우저는 요청 토큰과 비밀을 가진 URL을 반환 할 것입니다 ..... 나는 그것을 위해 Scribe를 사용합니까? –