2016-11-16 2 views
2

Google API 인증을 위해 OAuthSwift 포드를 사용하고 있습니다. 콜백에서 새로 고침 토큰이 누락되었습니다. Google이 500 Server Error을 반환하면서 사용자가 이미 인증 한 후에 새 토큰을 요청하려고하면 새로 고침 토큰을 저장하고 다음에 로그인 할 때 사용자를 인증하고 새 토큰을 검색하려고합니다.Google에서 새로 고침 토큰을 얻는 방법 데이터 API OAuth 2 iOS

  let callback = "\(Bundle.main.bundleIdentifier ?? ""):/oauth2Callback" 
      _ = ytOAuth2Swift?.authorize(
       withCallbackURL: URL(string: callback)!, 
       scope: "https://www.googleapis.com/auth/youtube", state: state, 
       success: { credential, response, parameters in 

        print("YouTube Access_Token \(credential.oauthToken)") 
        print("YouTube efreshR_Token \(credential.oauthRefreshToken)") 
       }, 
       failure: { error in 
        print("ERROR: \(error.localizedDescription)") 
      } 
      ) 

이것은 우리가 돌아 가야 할 응답입니다 :

이 내 코드입니다!

{ 
    "access_token":"1/fFAGRNJru1FTz70BzhT3Zg", 
    "expires_in":3920, 
    "token_type":"Bearer", 
    "refresh_token":"1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" 
} 

내가 운이 내장 WebView을 사용하지 않는 시도 :

[mbedded WebView error messageE[2]

답변

2

Response Parameters

구글의 API 문서에 따르면,이 와서해야 반응이다 Google API가 처음부터 한 번 새로 고침 토큰을 제공 한 것처럼 보입니다. 새로운 요청은이를 제공하지 않습니다. 일 론가. 그렇다면 refresh_token은 첫 번째 인증시에만 제공되므로 더 많은 권한을 부여하면 refresh_token이 다시 반환되지 않을 수 있습니다. 안내를 따르십시오 :

  • 계정 보안 설정 : https://www.google.com/settings/u/1/security으로 이동하십시오.
  • "응용 프로그램 및 사이트 인증"옆에있는 편집 버튼을 클릭하십시오.
  • 그런 다음 앱 옆에있는 "액세스 해지"를 클릭하십시오.

그 후 다음 호출은 내 패널에서 영어를 사용하지 않기 때문에 그것은 조금 다를 수 있습니다 refresh_token도

를 반환해야합니다. Google에서 refresh_token을 사용할 때 만료되지 않으므로 영원히 사용하여 새 access_tokens를 만들 수 있습니다.

또 다른 해결책

작동하지 않을 경우, 오프라인 같은 코드 access_type에 설정하려고은 (내가 가장 쉬운 방법은 access_type=offline로 API의 URL에 GET의 PARAM를 추가하는 단지 생각).

쿼리에 prompt=consent이 필요할 수도 있습니다. 이 권한을 부여 할 사용자를 강제, 다음에서 찾을 수 있습니다

더 많은 정보 refresh_token도 반환해야합니다 Google Documentation: Oauth2

구글 API의 좋은 점은 refresh_token도 당신이 습관을 취소 할 때까지 만료되지 않습니다

또는 새 것을 만들 수 있습니다. 따라서 새로운 코드를 생성하기를 원할 때마다 코드를 하드 코딩하고 사용할 수도 있습니다.

+0

안녕하세요 @ 카롤, 멋진 답변에 감사드립니다. 나는 내가 개발할 수있는 유일한 방법은 접근권을 계속 취소하는 것인데, 그렇지 않다면 나는'access_token'을주지 않는다. D.'access_type = offline'을 시도해보고 알려 드리겠습니다. –

+0

환영합니다 :) 어쨌든 Google의 refresh_token은 만료되지 않으므로 원하는만큼 많은 access_tokens를 사용할 수 있습니다. –

+0

안녕하세요 @ 카롤, 폐지 후, 심지어 새 Google 애플 리케이션을 만들 때, API는 refresh_token을 제외한 3 개의 매개 변수 만 반환합니다. 많은 감사합니다 –