Skip to content

fix: forward OIDC nonce to native Kakao login - #73

Merged
mym0404 merged 4 commits into
mym0404:mainfrom
oesnuj:fix/kakao-login-nonce
Jul 11, 2026
Merged

fix: forward OIDC nonce to native Kakao login#73
mym0404 merged 4 commits into
mym0404:mainfrom
oesnuj:fix/kakao-login-nonce

Conversation

@oesnuj

@oesnuj oesnuj commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

OIDC 기반 인증을 카카오 로그인과 연동하는 과정에서 nonce 관련 문제를 발견해, 다른
사용자분들께도 도움이 될 수 있을 것 같아 수정 사항을 제안드립니다.

Type of change

  • Bug fix (non-breaking change which fixes an issue)

What does this change?

login()의 TypeScript 타입에는 web.nonce가 정의돼 있지만 실제로는 Native.login() 호출에
전달되지 않습니다. Android/iOS 네이티브 브릿지에도 nonce 파라미터가 없습니다.

OIDC nonceid_token 재전송 공격을 막기 위해 요청 시 보낸 값과 id_tokennonce claim을
대조하는 데 쓰입니다. 지금은 이 claim이 카카오 로그인에서 항상 비어 있어서, nonce를 검증하는
백엔드에서는 로그인이 거부됩니다.

카카오 네이티브 SDK는 이미 nonce 파라미터를 지원합니다.

  • Android: UserApiClient.loginWithKakaoTalk/loginWithKakaoAccount/loginWithNewScopes(nonce: ...)
  • iOS: UserApi.loginWithKakaoTalk/loginWithKakaoAccount(nonce: ...)

리뷰 반영으로 nonce를 최상위 로그인 옵션으로 두고, 아래 체인 전체로 연결했습니다.

JS login({ nonce })
  -> TS Spec (NativeKakaoUser.ts)
  -> Kotlin module (old-arch + new-arch codegen)
  -> Swift manager (RNCKakaoUserManager.swift)
  -> Obj-C++ bridge (RNCKakaoUser.mm)
  -> loginWithKakaoTalk / loginWithKakaoAccount / loginWithNewScopes

웹(index.web.ts)도 같은 최상위 nonce를 우선 사용하며, 기존 web.nonce는 하위호환을 위해
폴백으로 동작합니다.

Testing

  • tsc -b, yarn prepack, yarn lint(ESLint/SwiftFormat/ktlint/ClangFormat) 모두 통과
  • example 앱 iOS 실빌드 성공, 수정한 두 파일(RNCKakaoUserManager.swift, RNCKakaoUser.mm) 정상 컴파일
  • 동일한 변경을 다운스트림 앱에 적용해 실기기에서 카카오 로그인 + 백엔드의 nonce claim 검증까지 통과 확인
  • 문서는 Docusaurus 로컬 서버로 한/영 페이지 렌더링 확인

감사합니다

@mym0404 mym0404 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nonce가 네이티브에서도 지원되는 옵션으로 확인되어 API 위치에 대한 의견을 남겼습니다. 확인해 주시면 감사하겠습니다.

Comment thread packages/user/src/index.ts Outdated
prompts ?? [],
useKakaoAccountLogin ?? false,
scopes ?? [],
web?.nonce,

@mym0404 mym0404 Jul 11, 2026

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

변경해 주셔서 감사합니다. nonce는 웹뿐 아니라 Android와 iOS Kakao SDK에서도 지원하는 옵션으로 확인됩니다. 현재 구조에서는 네이티브에서 nonce를 사용할 때 타입상 web.redirectUri도 함께 전달해야 합니다. 가능하다면 nonce?: string을 최상위 로그인 옵션으로 두고, 네이티브와 index.web.ts가 같은 값을 사용하도록 구성하는 방향은 어떨지 검토 부탁드립니다.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요, 리뷰해 주셔서 감사합니다.

말씀 주신 대로 네이티브에서도 지원되는 옵션인 만큼 최상위에 두는 것이 더 적절한 것 같습니다. 제안 주신 방향대로 nonce를 최상위 로그인 옵션으로 옮기고, 네이티브와 index.web.ts가 같은 값을 사용하도록 수정했습니다.
관련하여 문서(login.mdx 한/영)에도 nonce 항목을 추가해 두었습니다.

web.nonce는 기존 버전에서 제공되던 옵션이라 하위호환을 위해 일단 남겨두었습니다. index.web.ts는 최상위 nonce를 우선 사용하고, 없으면 web.nonce로 동작하도록 했습니다. 이 부분은 어떻게 처리하는 것이 좋을지 의견 주시면 반영하겠습니다. 감사합니다.

mym0404 commented Jul 11, 2026

Copy link
Copy Markdown
Owner

CI 환경 수정이 main에 반영되었습니다. 번거로우시겠지만 현재 PR 브랜치에 최신 origin/main을 한 번 병합해 주실 수 있을까요? 반영해 주시면 CI 결과를 다시 확인하겠습니다. 감사합니다.

@oesnuj

oesnuj commented Jul 11, 2026

Copy link
Copy Markdown
Contributor Author

CI 환경 수정이 main에 반영되었습니다. 번거로우시겠지만 현재 PR 브랜치에 최신 origin/main을 한 번 병합해 주실 수 있을까요? 반영해 주시면 CI 결과를 다시 확인하겠습니다. 감사합니다.

알려주셔서 감사합니다. 최신 main 병합하여 푸시해 두었습니다. CI 결과 한 번 더 확인 부탁드리겠습니다.

@mym0404
mym0404 merged commit fac2330 into mym0404:main Jul 11, 2026
4 checks passed
@mym0404

mym0404 commented Jul 11, 2026

Copy link
Copy Markdown
Owner

기여감사합니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants