작성
·
3.2K
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
16
아래 해당 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 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 여기에 적어도 잘 작동하는 것 같습니다.
감사합니다.
강사님과 다르게 최신 버전으로 다운 받겠다고 Keycloak 21.1.2 버전을 다운받고 사용하다보니 발생한 에러 였네요.
강사님과 동일하게 Keycloak 19.0.1 버전을 다운 받으실 분들은 아래의 주소로 들어가서 다운 받으시면 됩니다.
3
저도 Keycloak 20버전을 사용했었는대
19 버전까진 괜찬았던거 같지만 20+버전부터 발생하는 이유 같습니다.
저는 code를 발급 받을때 스코프에 openid를 추가해서 해결했습니다.
ex:&scope=profile email openid
0
음...
userinfo 를 가지고 오는 것은 token 을 담아서 보내는 것 외에는 특별한 설정이 없는데요..
keycloak 버전을 19로 해서 한번 해서 해보시고 혹시 강의에서 설정한 것과 동일한지 체크 해 보십시오
그리고도 동일한 결과가 나온다면 테스트 한 정보를 공유해 주시면 제가 해 보도록 하겠습니다.
해당 답글로 해결 되었습니다.
감사합니다.