안녕하세요.
카카오에 OpenID Connect 지원 소식을 듣고 기쁜마음에 AWS Cognito에 통합하기를 시작했습니다.
AWS Cognito 참고: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-provider.html#cognito-user-pools-oidc-providers
문제는 email 정보가 필수라서 Authorized scope에 "account_email openid"를 주더라도, id token정보 payload에 email이 없어서 Cognito에서 attribute mapping시에 오류가 발생하는것 같습니다.
카카오 ID 토큰 정보: REST API | Kakao Developers 문서
실제 rest api를 통하여 사용자 정보에 email이 포함되지만, id token엔 빠져있는것을 확인했습니다.
구글은 oauth 연동이 잘 되어서 해당 문서를 참고로 추측해보건데, email scope이 주어지는 경우에 email 값이 id token에 추가되는것을 볼 수 있습니다.
구글 id token 참고: OpenID Connect | Google Identity | Google Developers
혹시 카카오에서도 scope에 따른 속성 값을 추가하는 기능을 구현하려고 계획중이신지 알고싶습니다.
제가 필요한 정보는 id token값에 "email"입니다.
감사합니다.
tim.l
4월 25, 2022, 10:39오전
2
안녕하세요.
이번에 카카오 OpenID Connect 기능을 오픈하며
AWS와 Azure같은 서비스에서도 원활히 기능 사용할 수 있도록 검토하며 개선하고 있는데요.
아쉽지만, id token에 이메일은 포함하고 있지 않습니다.
/v2/user/me 는 계층형 데이터라 OIDC 표준에 맞지 않고,
이메일은 개인정보라 개인정보만 취급하는 OIDC용, 별도 userinfo API를 제공하게되었습니다. 오늘 배포 되었으며,
다음과 같이 사용하실 수 있으며, 디벨로퍼스 Scope설정에 따라 제공 여부 결정됩니다.
참고 부탁드려요~
curl -v -X GET "https://kapi.kakao.com/v1/oidc/userinfo" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
HTTP/ 1.1 200 OK
{
“sub”: 123456789,
“name”: “홍길동",
“nickname”: “홍길동",
“picture”: ""
“email”: "sample@sample.com",
“email_verified”: true,
“gender”: “MALE”,
“birthdate”: “1970-01-01”,
“phone_number”: “+82 00-0000-0000”,
“phone_number_verified”: true
}
1개의 좋아요
와우 감사합니다!
해당 경로를 입력하고 email 매핑해서 테스트해봤더니 성공적으로 연동되었습니다. ㅎㅎ
aws cognito OpenID Connect에서 userinfo api가 따로 있었던 이유가 그 이유였군요.
다른 분이 먼저 문의하신 discovery 부분마저 지원되면 자동 셋팅되고 손쉽게 연동해서 쓸 수 있겠네요.
감사합니다!
수고하세요~
1개의 좋아요
tim.l
4월 28, 2022, 3:19오전
4
@alex.sangjoon.park
안녕하세요.
OIDC Discovery 스펙 배포 되었습니다.
https://kauth.kakao.com/.well-known/openid-configuration
{
"issuer": "https://kauth.kakao.com",
"authorization_endpoint": "https://kauth.kakao.com/oauth/authorize",
"token_endpoint": "https://kauth.kakao.com/oauth/token",
"userinfo_endpoint": "https://kapi.kakao.com/v1/oidc/userinfo",
"jwks_uri": "https://kauth.kakao.com/.well-known/jwks.json",
"subject_types_supported": ["public"],
"id_token_signing_alg_values_supported": ["RS256"],
"response_types_supported": ["code"],
"grant_types_supported": ["authorization_code","refresh_token"],
"code_challenge_methods_supported": ["S256"],
"claims_supported": ["iss","aud","sub","auth_time","exp","iat","nonce"]
}
3개의 좋아요