2014-11-15 2 views
0

AWS "SDK for the browser"를 사용하여 일부 AWS 서비스에 대한 직접 호출을 수행하고 Google Plus를 사용하여 사용자 인증을 수행하려고합니다.AWS JavaScript SDK를 사용할 때 Google Plus 무기명 토큰을 새로 고치는 방법

초기 인증이 올바르게 작동하며 AWS의 Google Plus에서받은 베어러 토큰을 설정 한 후에 브라우저에서 직접 S3 호출을 수행 할 수 있습니다. 내 문제는 초기 사용자 토큰이 만료되고 S3에 대한 호출이 오류를 발생시키기 시작하는 긴 사용자 세션에서 발생합니다 (만료 된 액세스 토큰을 사용하고 있다는 오류).

AWS가 새로 고침 토큰에 대해 Google Plus 엔드 포인트를 호출하지 않고 내가 설정 한 초기 값을 계속 사용하는 것으로 의심됩니다.

그래서 AWS에서 설정할 수있는 완전히 새로운 베어러 토큰을 Google API에 보내도록 강제 할 수 있습니까? 전화가 걸리는 경우 :

var clientId = "<my client id>", 
    scope = "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email"; 

gapi.auth.authorize({ 
    client_id: clientId, 
    scope: scope, 
    immediate: true 
}, function(r) { console.log(r.id_token) }); 

만료 된 경우에도 항상 동일한 무기명 토큰을받습니다. 그러나 페이지를 새로 고침하면 실제로 완전히 새로운 것을 얻습니다. 그래서 GAPI가 AWS에서 설정할 수있는 새로운 베어러 토큰을 강제로 제공 할 수있는 방법이 있습니다. 또는 새로 고침 토큰을 사용하도록 AWS SDK에 호출해야하는 메소드가 있습니까? 내가 지금처럼 auth.signIn 대신 auth.authorize 호출하는 경우 :

업데이트는 다음

gapi.auth.signIn({ 
    clientid: clientId, 
    scope: scope, 
    cookiepolicy : 'single_host_origin', 
    response_type: 'id_token token gsession', 
    callback: loginToGoogle, 
    immediate: true 
}) 

나는 새로운 id_token 얻을 수 있지만,이 종료하기 전에 몇 밀리 초 동안 성가신 로그인 팝업을 보여줍니다 그 자체. 팝업 창을 표시하지 않고 클라이언트에서 새로운 무기명 토큰을 얻는 다른 방법이 있습니까?

답변

0

나는이 경우 gapi.auth.authorize가 올바르게 작동하지 않는다는 것에 놀랐습니다. 당신은 gapi.auth.authorize의 PARAMS에

cookiepolicy : 'single_host_origin', response_type: 'id_token token gsession',

를 추가 할 수 있을까요?

오류가 발생하기 시작한 시점은 언제입니까? 토큰이 만료되는 시점입니까 (응답의 .expires_at 속성을 확인하여 확인할 수 있습니다)? 토큰이 만료되면 동일한 access_token을 얻고 있습니까?

오프라인 액세스 흐름은 대안입니다 : https://developers.google.com/accounts/docs/OAuth2WebServer