인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

sangwoo0795님의 프로필 이미지

작성한 질문수

스프링 시큐리티 OAuth2

OAuth 2.0 Roles 이해

keycloack userinfo 403 forbidden error

작성

·

3.5K

1

https://www.inflearn.com/questions/693312/profile-email-%EA%B6%8C%ED%95%9C%ED%8E%98%EC%9D%B4%EC%A7%80%EA%B0%80-%EB%82%98%EC%98%A4%EC%A7%80-%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4

 

해당 페이지에 있는 해결 방법 그대로

consent required를 킨 후에

access token을 받아오는 것 까지는 잘 되는데,

마찬가지로 userinfo 요청시

http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo

에 Authorization에 Bearer Token타입 체크 후

Token값도 받아온 access_token값으로 잘 넣어줬는데도

403 forbidden 에러가 뜨네요

무엇이 잘못된걸까요

keycloack버전은 20.0.2입니다

 

답변 3

17

미용쓰기님의 프로필 이미지

아래 해당 url 참고하여 해결 가능합니다.

https://keycloak.discourse.group/t/issue-on-userinfo-endpoint-at-keycloak-20/18461/7

 

  1. https://github.com/keycloak/keycloak/pull/14237MR 을 보시면 알수있듯이 keycloak 버전이 올라가면서 openid scope 를 누락시킨 경우 403 이 노출됩니다.

  2. keycloak > 왼쪽 탭 > Client scopes > Create client scope > 'openid' 이름으로 default type 생성

  3. keycloak > 왼쪽 탭 > Client > oauth2-client-app > Client scopes > Add client scope > 2번에서 생성한 openid default 값으로 추가

  4. code 발급부터 다시해보시면 됩니다.

박준혁님의 프로필 이미지

해당 답글로 해결 되었습니다.
감사합니다.

땃쥐님의 프로필 이미지

감사합니다!

Parkpro님의 프로필 이미지

해당 답변으로 깔끔하게 해결 완료 했습니다 ㅎ
감사합니다 !

system.out.println님의 프로필 이미지

덕분에 해결할 수 있었습니다!! 저는 왜 이거 하나 못 찾아서 헤매고 있었을까요..

https://www.keycloak.org/docs/latest/upgrading/index.html#userinfo-endpoint-changes

스택오버플로우나 다른 곳에서 질문이 등록되어 있었지만 잘못된 답변도 많아서 일단 keycloak 공식 문서를 찾아보자 ! 했습니다.

  • It is now required for access tokens to have the openid scope, which is stipulated by UserInfo being a feature specific to OpenID Connect and not OAuth 2.0. If the openid scope is missing from the token, the request will be denied with a 403 Forbidden (see above).

  • UserInfo now checks the user status, and returns the invalid_token response if the user is disabled.

이 글을 보고 openid 라는 걸 scope 에 추가를 해줘야 하는구나. 근데 scope 는 어디서 어떻게 추가를 해줘야하는거지..? 여기서 일단 정지.. 진짜 전 멍청한가 봅니다 ㅜ.ㅜ

Client scopes 에서 생성 후 default 로 추가하면 scope 에 매번 적을 필요없이 적용되는 것 같고,

postman 에서 scope = profile emaill openid 여기에 적어도 잘 작동하는 것 같습니다.

puzzler님의 프로필 이미지

감사합니다.

강사님과 다르게 최신 버전으로 다운 받겠다고 Keycloak 21.1.2 버전을 다운받고 사용하다보니 발생한 에러 였네요.

 

강사님과 동일하게 Keycloak 19.0.1 버전을 다운 받으실 분들은 아래의 주소로 들어가서 다운 받으시면 됩니다.

https://github.com/keycloak/keycloak/releases/tag/19.0.1

K MS님의 프로필 이미지

이 글로 해결했네요 감사합니당

답글


3

Crow님의 프로필 이미지

저도 Keycloak 20버전을 사용했었는대

19 버전까진 괜찬았던거 같지만 20+버전부터 발생하는 이유 같습니다.

저는 code를 발급 받을때 스코프에 openid를 추가해서 해결했습니다.

ex:&scope=profile email openid

 

 


https://keycloak.discourse.group/t/issue-on-userinfo-endpoint-at-keycloak-20/18461/8?u=oneso123456789

0

정수원님의 프로필 이미지
정수원
지식공유자

음...

userinfo 를 가지고 오는 것은 token 을 담아서 보내는 것 외에는 특별한 설정이 없는데요..

keycloak 버전을 19로 해서 한번 해서 해보시고 혹시 강의에서 설정한 것과 동일한지 체크 해 보십시오

그리고도 동일한 결과가 나온다면 테스트 한 정보를 공유해 주시면 제가 해 보도록 하겠습니다.