인프런 커뮤니티 질문&답변
keycloack userinfo 403 forbidden error
작성
·
3.7K
1
해당 페이지에 있는 해결 방법 그대로
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
https://github.com/keycloak/keycloak/pull/14237MR 을 보시면 알수있듯이 keycloak 버전이 올라가면서 openid scope 를 누락시킨 경우 403 이 노출됩니다.
keycloak > 왼쪽 탭 > Client scopes > Create client scope > 'openid' 이름으로 default type 생성
keycloak > 왼쪽 탭 > Client > oauth2-client-app > Client scopes > Add client scope > 2번에서 생성한 openid default 값으로 추가
code 발급부터 다시해보시면 됩니다.
덕분에 해결할 수 있었습니다!! 저는 왜 이거 하나 못 찾아서 헤매고 있었을까요..
https://www.keycloak.org/docs/latest/upgrading/index.html#userinfo-endpoint-changes
스택오버플로우나 다른 곳에서 질문이 등록되어 있었지만 잘못된 답변도 많아서 일단 keycloak 공식 문서를 찾아보자 ! 했습니다.
It is now required for access tokens to have the
openidscope, which is stipulated by UserInfo being a feature specific to OpenID Connect and not OAuth 2.0. If theopenidscope is missing from the token, the request will be denied with a403 Forbidden(see above).UserInfo now checks the user status, and returns the
invalid_tokenresponse if the user is disabled.
이 글을 보고 openid 라는 걸 scope 에 추가를 해줘야 하는구나. 근데 scope 는 어디서 어떻게 추가를 해줘야하는거지..? 여기서 일단 정지.. 진짜 전 멍청한가 봅니다 ㅜ.ㅜ
Client scopes 에서 생성 후 default 로 추가하면 scope 에 매번 적을 필요없이 적용되는 것 같고,
postman 에서 scope = profile emaill openid 여기에 적어도 잘 작동하는 것 같습니다.
감사합니다.
강사님과 다르게 최신 버전으로 다운 받겠다고 Keycloak 21.1.2 버전을 다운받고 사용하다보니 발생한 에러 였네요.
강사님과 동일하게 Keycloak 19.0.1 버전을 다운 받으실 분들은 아래의 주소로 들어가서 다운 받으시면 됩니다.
4
저도 Keycloak 20버전을 사용했었는대
19 버전까진 괜찬았던거 같지만 20+버전부터 발생하는 이유 같습니다.
저는 code를 발급 받을때 스코프에 openid를 추가해서 해결했습니다.
ex:&scope=profile email openid
0
음...
userinfo 를 가지고 오는 것은 token 을 담아서 보내는 것 외에는 특별한 설정이 없는데요..
keycloak 버전을 19로 해서 한번 해서 해보시고 혹시 강의에서 설정한 것과 동일한지 체크 해 보십시오
그리고도 동일한 결과가 나온다면 테스트 한 정보를 공유해 주시면 제가 해 보도록 하겠습니다.






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