[authentication] Google OAuth 2 인증-오류 : redirect_uri_mismatch

https://code.google.com/apis/console 웹 사이트에서 애플리케이션을 등록하고 생성 된 클라이언트 ID :클라이언트 시크릿 을 앱에 설정하고 Google에 로그인하려고했습니다. 불행히도 오류 메시지가 나타납니다.

Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI

scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id

이 메시지는 무엇을 의미하며 어떻게 해결할 수 있습니까? gem omniauth-google-oauth2를 사용합니다 .



답변

응답이 리턴되는 경로 재 지정 URI가 API 콘솔에 등록되어 있어야하며,이를 수행하지 않았거나 올바르게 수행하지 않았다는 오류가 표시됩니다.

프로젝트의 콘솔로 이동하여 API 액세스 아래를 확인하십시오. 리디렉션 URI 목록과 함께 client ID& client secret가 표시되어야합니다 . 원하는 URI가 목록에 없으면 설정 편집을 클릭하고 URI를 목록에 추가하십시오.

편집 : (아래의 높은 평가 의견에서) Google API 콘솔을 업데이트하고 변경 사항이 있으면 다소 시간이 걸릴 수 있습니다. 일반적으로 단 몇 분이지만 때로는 더 길어 보입니다.


답변

내 경우에는 그것은이었다 wwwnon-wwwURL. 실제 사이트에는 wwwURL이 있고 Google 개발자 콘솔 의 인증 된 리디렉션 URI 에는 non-wwwURL이 있습니다. 따라서 리디렉션 URI에 불일치가있었습니다. Authorized Redirect URIsGoogle 개발자 콘솔에서 wwwURL 로 업데이트 하여 해결했습니다 .

다른 일반적인 URI 불일치는 다음과 같습니다.

  • 사용 http://승인 된 리디렉션 URI에와 https://실제 URL, 또는 그 반대로
  • http://example.com/승인 된 리디렉션 URI에서 후행 슬래시 ( ) 사용 및 후행 슬래시 ( http://example.com)를 실제 URL로 사용하지 않거나 그 반대의 경우

다음은 Google 개발자 콘솔의 단계별 스크린 샷입니다. 리디렉션 URI를 업데이트하기 위해 개발자 콘솔 페이지를 찾는 데 어려움이있는 사용자에게 도움이됩니다.

  1. https://console.developers.google.com으로 이동

  2. 프로젝트를 선택하십시오

프로젝트를 선택하십시오

  1. 메뉴 아이콘을 클릭하십시오

메뉴 아이콘을 클릭하십시오

  1. API Manager메뉴를 클릭하십시오

API 관리자 메뉴 선택

  1. Credentials메뉴를 클릭하십시오 . 아래 OAuth 2.0 Client IDs에 고객 이름이 있습니다. 제 경우에는입니다 Web Client 1. 이를 클릭하면 Authorized Javascript OriginAuthorized redirect URI를 편집 할 수있는 팝업이 나타납니다 .

자격 증명 메뉴 선택

다음은 프로젝트 및 클라이언트 ID 작성 에 대한 Google 기사입니다 .


답변

당신이 사용하는 경우 Google+에서 자바 스크립트 버튼을 , 당신은 사용해야하는 postmessage대신 실제 URI의. Google 문서는 어떤 이유로 든 명확하게 설명하지 않기 때문에 거의 하루 종일이 문제를 파악했습니다.


답변

API 와 같은 클라이언트 측에서 인증 코드 를 검색 한 후 플로우 를 서버에 전달하고 코드를 사용하여 액세스 및 새로 고침 토큰을 저장하려는 경우 리터럴 문자열을 사용해야합니다. redirect_uri 대신에.GoogleAuth.grantOfflineAccess()postmessage

예를 들어, Ruby doc 의 스 니펫을 기반으로 빌드하십시오 .

client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
auth_client = client_secrets.to_authorization
auth_client.update!(
  :scope => 'profile https://www.googleapis.com/auth/drive.metadata.readonly',
  :redirect_uri => 'postmessage' # <---- HERE
)

# Inject user's auth_code here:
auth_client.code = "4/lRCuOXzLMIzqrG4XU9RmWw8k1n3jvUgsI790Hk1s3FI"
tokens = auth_client.fetch_access_token!
# { "access_token"=>..., "expires_in"=>3587, "id_token"=>..., "refresh_token"=>..., "token_type"=>"Bearer"}

언급 할 유일한 Google 문서 postmessage는이 오래된 Google+ 로그인 문서 입니다. G +가 종료 된 이후 의 스크린 샷 및 보관 링크 는 다음과 같습니다.

기존 Google+ API DOC

오프라인 액세스문서 페이지 에이 내용이 언급되어 있지 않은 것은 절대 용서할 수 없습니다. # 페이스 팜


답변

내 웹 응용 프로그램의 경우 다음을 작성하여 실수를 수정했습니다.

instead of : http://localhost:11472/authorize/
type :      http://localhost/authorize/


답변

Google Check 프로토콜도 “http : //”또는 “https : //”프로토콜을 확인하십시오. 목록에 두 URL을 모두 추가하는 것이 좋습니다.


답변

이것은 “하나의”솔루션이 없다는 것이 상당히 이상하고 성가신 것 같습니다. 나를 위해 http : // localhost : 8000 은 해결되지 않았지만 http : // localhost : 8000 / 은 해결되었습니다.