웹 rest api 연동이 잘 안되네요..!(omniauth 관련)

사용자 정보를 가져오는 과정에서 REST API를 이용하는데요.

제가 보기엔 사이트 도메인과 Redirect Path를 제대로 입력한 것 같은데
callback 에서 자꾸 redirect_uri_mismatch 오류가 나네요…

아래는 오류 로그입니다.

Started GET “/users/auth/kakao/callback?code=mM9G1CrA3LbJHGh_3BTFR4A2r77T9RL7u6KKhy4XoaA0B6ap9qP5PGuH0CatpZZJDzpXkqwQQjEAAAFSsn3f9w&state=592cf0b360bad7c99de9bf8cf37743ba1852e9d3ab6a4d19” for ::1 at 2016-02-06 02:32:19 +0900
I, [2016-02-06T02:32:19.935405 #28165] INFO – omniauth: (kakao) Callback phase initiated.
E, [2016-02-06T02:32:20.427169 #28165] ERROR – omniauth: (kakao) Authentication failure! invalid_credentials: OAuth2::Error, redirect_uri_mismatch: Redirect URI mismatch.
{“error”:“redirect_uri_mismatch”,“error_description”:“Redirect URI mismatch.”}
Processing by OmniauthCallbacksController#failure as HTML
Parameters: {“code”=>“mM9G1CrA3LbJHGh_3BTFR4A2r77T9RL7u6KKhy4XoaA0B6ap9qP5PGuH0CatpZZJDzpXkqwQQjEAAAFSsn3f9w”, “state”=>“592cf0b360bad7c99de9bf8cf37743ba1852e9d3ab6a4d19”}
Redirected to http://localhost:3000/users/login
Completed 302 Found in 5ms (ActiveRecord: 0.0ms)

2개의 좋아요

@leekorea09 왠지 해당 문제를 해결하셨을것 같은데요, 혹시 해결이 안되셨다면 다시 알려주세요. 로그인 후 redirect되는 uri가 개발자 웹사이트에 등록된 domain + path와 맞지 않아서 발생하는 문제입니다~

1개의 좋아요

아직 해결 못했습니다…ㅜ
일단 카카오 어플리케이션의 kakao_redirect는 /users/auth/kakao/callback 이구요
요청하는 서버의 redirect_path도 위와 같습니다.,

다른 분들보니까 인코딩 문제일 수도 있다고 해서 utf-8 로도 해봤는데도 안되네용…

검색 키워드는 invalid_credentials, redirect_uri_mismatch 였습니다.

@leekorea09 번거롭게 해드려 죄송한데요, 한번 다시 요청해보시고, 위에처럼 로그좀 주실 수 있을까요? (최신로그)

@leekorea09 제가 어제 로그를 좀 뒤져봤는데요~

앞에 "/users"가 없이 "http://localhost:4567/auth/kakao/callback"로 들어오는것 같네요~
개발자 웹사이트에 등록되어 있는 도메인 중에 "http://localhost:4567/users/auth/kakao/callback"은 있구요~

개발자 웹사이트에 등록된 redirect url관련 path를 바꿔주시던지 실제 redirect되는 주소를 바꿔주시던지 해야 할것 같아요.

답변 감사드립니다.!
포트 번호 4567 이라면 제가 여러가지 테스트를 하느라 아마 겹쳐서 로그가 남은것 같은데요…ㅜ

방금 로그 나온 것 답변으로 남깁니다…!
Started GET “/users/auth/kakao/callback?code=tOfolVFn3tu88Dzg8nqya0EFc96e5nhP3clUgdu-n3DX_ls13DYsYRvIwA56MO54H4_y2KwQQI0AAAFS7j8zQg&state=9ee0a57dacc05b9ebeca971d025fbf48b4e39ff24d590a8f” for ::1 at 2016-02-17 17:01:05 +0900
I, [2016-02-17T17:01:05.282880 #91711] INFO – omniauth: (kakao) Callback phase initiated.
E, [2016-02-17T17:01:05.392566 #91711] ERROR – omniauth: (kakao) Authentication failure! invalid_credentials: OAuth2::Error, redirect_uri_mismatch: Redirect URI mismatch.
{“error”:“redirect_uri_mismatch”,“error_description”:“Redirect URI mismatch.”}
Processing by Users::OmniauthCallbacksController#failure as HTML
Parameters: {“code”=>“tOfolVFn3tu88Dzg8nqya0EFc96e5nhP3clUgdu-n3DX_ls13DYsYRvIwA56MO54H4_y2KwQQI0AAAFS7j8zQg”, “state”=>“9ee0a57dacc05b9ebeca971d025fbf48b4e39ff24d590a8f”}
Redirected to http://localhost:3000/users/login
Completed 302 Found in 4ms (ActiveRecord: 0.0ms)

@leekorea09 원인을 안것 같아요 ㅎㅎㅎ code까지는 성공적으로 받았는데, access token을 받을 때 redirect uri가 code 요청한 redirect 요청과 달라서 에러가 나는 것이였네요.

로그를 보니,

  1. code 받을 때에는(/oauth/authorize)

    http://localhost:3000/users/auth/kakao/callback

  2. access token 받을때에는(/oauth/token)

    http://localhost:3000/users/auth/kakao/callback?code=tOfolVFn3tu88Dzg8nqya0EFc96e5nhP3clUgdu-n3DX_ls13DYsYRvIwA56MO54H4_y2KwQQI0AAAFS7j8zQg&state=9ee0a57dacc05b9ebeca971d025fbf48b4e39ff24d590a8f

이렇게 요청하셨네요. 위 1, 2 요청시의 redirect uri는 항상 exact match가 되어야 합니다~(보안상 변조방지를 위해)

1개의 좋아요

아…! 저녁 늦게 답변 감사드립니다
저도 그 부분에서 계속 의아했는데 알고 보니 사용하는 오픈소스 (omniauth) 에서 문제가 있었던 것 같네요
문제라기보다는 … redirect uri의 parameter를 제거하는 버전으로 실행하니 access token까지 잘 받아오는 것 같아요

저와 같은 시행 착오를 겪으시는 분들은
관련 이슈 https://github.com/intridea/omniauth-oauth2/issues/81 여기 링크에서 확인하세요~~

지금 생각해보니 그냥 javascript api를 사용할 걸 그랬네요…

1개의 좋아요

같은 현상을 겪으시는 분들이 메시지를 주시네요!
일단 제가 일시적으로(?) 수정한 omniauth-kakao gem을 사용하시면 됩니다.
https://github.com/Majestin/omniauth-kakao

2개의 좋아요