νŒ¨μŠ€ν‚€ 생성 μ•Œκ³ λ¦¬μ¦˜

νŒ¨μŠ€ν‚€ 등둝 μ‹œ PublicKeyCredentialCreationOptions의 pubKeyCredParams λ₯Ό 톡해 RP μ„œλ²„μ—μ„œ μ„ ν˜Έν•˜λŠ” κ³΅κ°œν‚€ μ•Œκ³ λ¦¬μ¦˜ λͺ©λ‘μ„ μ œκ³΅ν•  수 μžˆλŠ”λ°μš”. μ΄λ•Œ κ³΅κ°œν‚€ μ•Œκ³ λ¦¬μ¦˜ λͺ©λ‘μ—λŠ” ES256κ³Ό RS256은 λ°˜λ“œμ‹œ ν¬ν•¨ν•˜λŠ”κ²Œ μ’‹μŠ΅λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” λŒ€λΆ€λΆ„ ES256λ₯Ό μ§€μ›ν•˜κ³  μΌλΆ€λŠ” RS256λ₯Ό μ§€μ›ν•œλ‹€κ³  ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

νŒ¨μŠ€ν‚€ μ œκ³΅μ—…μ²΄ ν‘œμ‹œ

Determine the passkey provider with AAGUIDμ—μ„œ μ†Œκ°œν•˜λŠ” Passkey Provider AAGUIDsμ—λŠ” 일뢀 인증 기기에 λŒ€ν•œ 이름과 μ•„μ΄μ½˜ 정보λ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. Passkeys Authenticator AAGUID Explorerλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ λŒ€λΆ€λΆ„μ˜ μ‚¬μš©μžλŠ” 주둜 μ•„λž˜μ˜ 인증 κΈ°κΈ°λ₯Ό μ‚¬μš©ν•  것 κ°™μŠ΅λ‹ˆλ‹€.

AuthenticatorAAGUID
Google Password Managerea9b8d66-4d01-1d21-3ce4-b6b48cb575d4
Chrome on Macadce0002-35bc-c60a-648b-0b25f1f05503
iCloud Keychainfbfc3007-154e-4ecc-8c0b-6e020557d7bd
Samsung Pass53414d53-554e-4700-0000-000000000000
AAGUID UUID λ¬Έμžμ—΄

java-webauthn-server 라이브러리의 AAGUID 클래슀λ₯Ό 톡해 ByteArray둜 κ΅¬μ„±λœ aaguidλ₯Ό RFC4122 ν‘œμ€€μ˜ UUID ν˜•μ‹μ˜ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŒ¨μŠ€ν‚€ 등둝 이후에 λ³€ν•˜μ§€ μ•ŠλŠ” ν•­λͺ©μ΄λ―€λ‘œ νŒ¨μŠ€ν‚€ 등둝 κ³Όμ •μ—μ„œ Base64URL λ³΄λ‹€λŠ” UUID ν˜•νƒœλ‘œ μ €μž₯ν•΄λ‘λŠ”κ²Œ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μ‚¬μš©ν•˜κΈ°μ—λŠ” 더 νŽΈν•  것 κ°™λ„€μš”. μ•„λž˜μ™€ 같이 AAGUID의 asGuidString ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ„œ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

RegistrationResult result = relyingParty.finishRegistration(
        FinishRegistrationOptions.builder()
                .request(publicKeyCredentialCreationOptions)
                .response(publicKeyCredential)
                .build());


String aaguid = new AAGUID(result.getAaguid()).asGuidString();

νŒ¨μŠ€ν‚€ 식별 κ°€λŠ₯ν•œ 이름 μ„€μ •

μœ„ 화면은 κΉƒν—ˆλΈŒμ—μ„œ νŒ¨μŠ€ν‚€ 등둝 μ‹œ νŒ¨μŠ€ν‚€μ— λŒ€ν•œ 이름을 μž…λ ₯ν•˜λ„λ‘ μš”κ΅¬ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. 이와 같이 νŒ¨μŠ€ν‚€ 등둝 μ‹œ μ‚¬μš©μžμ—κ²Œ λ“±λ‘ν•˜λ €λŠ” 인증 기기에 λŒ€ν•œ 이름을 μž…λ ₯ν•˜λ„λ‘ μš”κ΅¬ν•˜κ±°λ‚˜ μ‚¬μš©μžμ—κ²Œ 기기에 λŒ€ν•œ 이름을 λ³„λ„λ‘œ μž…λ ₯ν•˜μ§€ μ•Šκ³  Authenticator 1 κ³Ό 같이 ν˜„μž¬ λ“±λ‘λœ 기기의 수λ₯Ό ν† λŒ€λ‘œ 기본값을 μ œκ³΅ν•˜κ³  μ‚¬μš©μžκ°€ λ³„λ„λ‘œ 이름을 μˆ˜μ •ν•  수 μžˆλ„λ‘ ν•˜λŠ”κ²Œ μ’‹μŠ΅λ‹ˆλ‹€.

νŒ¨μŠ€ν‚€ 등둝 수 μ œν•œ

일반적으둜 νŒ¨μŠ€ν‚€λ‘œ 등둝할 수 μžˆλŠ” 기기에 λŒ€ν•œ μ œμ•½μ€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€λ§Œ μ‚¬μš©μžκ°€ λ„ˆλ¬΄ λ§Žμ€ νŒ¨μŠ€ν‚€λ₯Ό λ“±λ‘ν•˜λŠ” 것은 였히렀 λ³΄μ•ˆ 상 쒋지 μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 기본적으둜 μ‚¬μš©μžμ— λŒ€ν•œ νŒ¨μŠ€ν‚€λŠ” 10개 μ΄λ‚΄λ‘œ μ œν•œν•˜κ³  μ •λ§λ‘œ μ‚¬μš©μžκ°€ μš”κ΅¬ν•  λ•Œ ν™•μž₯ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 저와 같은 μ‚¬μš©μžλŠ” μ‚Όμ„± κ°€λŸ­μ‹œ 슀마트폰의 μ‚Όμ„± 패슀만 μ‚¬μš©ν•˜μ—¬ νŒ¨μŠ€ν‚€λ₯Ό 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€.

Passkeys Cheat Sheet for Developersμ—μ„œ μ‚¬μš©μžμ—κ²Œ 더 λ‚˜μ€ νŒ¨μŠ€ν‚€λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•œ 방법에 λŒ€ν•΄μ„œ μ°Ύμ•„λ³΄μ„Έμš”.