게시일: 2025년 10월 3일
이제 Chrome 141부터 디지털 사용자 인증 정보 API가 기본적으로 사용 설정된다는 소식을 전해드립니다. 또한 iOS 26에서는 Chrome 및 기타 브라우저에 디지털 사용자 인증 정보 API 지원이 추가됩니다. 이 API는 웹에서 신원 확인에 새로운 수준의 보안과 개인 정보 보호를 제공하여 웹사이트가 사용자로부터 확인 가능한 정보를 요청하고 수신하는 표준화된 방법을 지원합니다.
오리진 트라이얼이 성공적으로 완료된 후 이제 디지털 사용자 인증 정보 API는 Android의 동일 기기 사용자 인증 정보 표시와 데스크톱 Chrome의 교차 기기 표시를 모두 지원합니다.
배경
지금까지 온라인에서 신원을 확인하는 것은 복잡한 절차였으며, 사용자가 신분증 스캔 파일을 업로드해야 하는 경우가 많았습니다. 이러한 관행은 필요한 것보다 더 많은 데이터를 공유하는 경우가 많으며, 이는 사용자에게 심각한 개인 정보 보호 문제를 야기합니다. 개발자에게도 위험이 발생합니다. 솔루션이 자주 균일하지 않은 민감한 데이터를 안전하고 개인 정보 보호 방식으로 처리하고 저장할 수 있어야 하기 때문입니다.
동시에 eIDAS 2.0과 같은 규정에서는 정부가 대중에게 디지털 신원 확인 수단을 제공하도록 요구하고 있습니다. 이러한 디지털 신원 지갑은 신원 및 연령 증명을 비롯한 다양한 사용자 인증 정보를 보유할 수 있어야 합니다. 온라인 서비스 제공업체는 사용자 신원을 확인하기 위해 이러한 사용자 인증 정보를 요청할 수 있습니다.
개인 정보 보호에 대한 사용자 요구와 사용자 데이터를 확인해야 하는 개발자 요구를 모두 충족할 수 있는 디지털 사용자 인증 정보의 잠재력을 인식한 W3C의 웹 표준 커뮤니티에서는 디지털 사용자 인증 정보 API라는 솔루션을 개발했습니다. 디지털 인증서 API는 사용자 정보를 확인하기 위한 내장 인터페이스를 도입하여 이 문제를 해결하는 것을 목표로 하며, 이는 대안에 비해 보안, 개인 정보 보호, 사용자 환경을 개선합니다. 이 API를 사용하면 사용자가 신분증 스캔과 같은 민감한 문서를 여러 웹사이트에 업로드하지 않아도 됩니다. 대신 웹사이트는 신뢰할 수 있는 발급자로부터 필요한 특정 암호화 서명 데이터만 요청하여 사용자와의 신뢰를 구축할 수 있습니다.
핵심 기능
디지털 사용자 인증 정보 API는 개인 정보 보호, 교차 플랫폼 지원, 표준화라는 세 가지 핵심 원칙을 기반으로 구축됩니다.
개인 정보 보호
Digital Credentials API는 온라인 개인 정보 보호 및 보안을 강화합니다. 이를 통해 사용자는 모바일 지갑의 디지털 ID를 웹사이트에 제시하여 기본 민감한 정보를 공개하지 않고 특정 사실을 확인할 수 있습니다. 예를 들어 API는 전체 생년월일을 공개하지 않고도 사용자가 18세 이상인지 확인할 수 있습니다. 이 '선택적 공개' 원칙은 웹사이트가 필요한 최소 정보만 수신하도록 합니다.
디지털 사용자 인증 정보 API는 Google의 Longfellow ZK와 같은 영지식 증명 (ZKP) 프로토콜과도 호환되므로 다른 정보를 공개하지 않고 특정 ID 어설션이 사실임을 암호화 증명으로 반환하여 사용자 개인 정보를 보호합니다.
다양한 플랫폼 지원
디지털 사용자 인증 정보 API는 사용자가 기기 간에 인증된 정보를 편리하게 표시할 수 있도록 다양한 플랫폼을 지원하는 것을 목표로 합니다.
Android: 사용자가 설치된 지갑 앱에서 사용자 인증 정보를 선택할 수 있는 내장 사용자 인터페이스를 제공합니다.
데스크톱: 사용자는 데스크톱 브라우저의 웹사이트에 모바일 지갑의 사용자 인증 정보를 제공할 수 있습니다. QR 코드를 스캔하면 시스템에서 데스크톱과 모바일 기기 간에 안전한 엔드 투 엔드 암호화 및 피싱 방지 연결을 설정합니다. 이 연결은 CTAP 프로토콜을 사용하여 BLE를 통해 사용자의 근접성을 확인하여 사용자가 실제로 두 기기를 모두 제어하고 있는지 확인합니다.
표준화
상호 운용성이 중요합니다. Chrome에서 디지털 인증서 API는 프로토콜 플랫폼에 독립적이며 OpenID4VP, ISO 18013-7 부록 C 등 다양한 프레젠테이션 프로토콜과 호환됩니다. Apple은 Safari 26.0부터 디지털 사용자 인증 정보 API 지원도 도입했습니다.
또한 디지털 인증서 API는 Android의 기본 제공 인증서 관리 지원과 호환되는 지갑의 성장하는 생태계를 기반으로 합니다. Google 월렛은 얼리 어답터이며 삼성 월렛과 1Password의 지원이 예정되어 있습니다.
오리진 트라이얼 이후 변경된 사항
이전 오리진 트라이얼에 참여한 경우 디지털 사용자 인증 정보 API가 navigator.identity.get()
에서 navigator.credentials.get()
로 이동하여 사용자 인증 정보 관리 API를 사용한 광범위한 ID 통합 노력과 일치하는 것을 확인할 수 있습니다.
또한 providers
매개변수가 requests
로, request
가 data
로 이름이 변경되었습니다.
구현
디지털 사용자 인증 정보 API 통합에는 기능 감지와 사용자 인증 정보 요청이라는 두 가지 주요 단계가 포함됩니다. 또한 개발자는 애플리케이션에서 사용자 인증 정보를 사용할 수 있는지 확인하는 맞춤 로직을 구현해야 합니다.
기능 감지
'디지털 사용자 인증 정보로 인증' 버튼을 표시하기 전에 사용자의 브라우저에서 디지털 사용자 인증 정보 API를 사용할 수 있는지 확인합니다.
if (typeof DigitalCredential !== "undefined") {
// Digital Credentials API is supported
} else {
// Digital Credentials API is not supported
}
사용자 인증 정보 요청
사용자 인증 정보를 요청하려면 digital
매개변수를 사용하여 navigator.credentials.get()
를 호출해야 합니다. 디지털 사용자 인증 정보 유형 내에서 다음 기본 매개변수를 사용하여 DigitalCredentialGetRequest를 포함하는 requests
배열을 추가합니다.
protocol
: 문자열로 교환 프로토콜을 지정합니다. 예를 들면"openid4vp"
또는"org-iso-mdoc"
입니다. 다음과 같이 브라우저에서 프로토콜을 지원하는지 감지합니다.if (DigitalCredential.userAgentAllowsProtocol("example-protocol")) { // Create a request with this protocol } else { // Protocol is not supported }
data
: 지정된 프로토콜에 대해 디지털 지갑 앱이 허용하는 매개변수가 있는 객체입니다."openid4vp"
의 경우 매개변수는 W3C 디지털 사용자 인증 정보 API 사양의 OpenID for Verifiable Presentation (OID4VP)에 정의되어 있습니다.try { const digitalCredential = await navigator.credentials.get({ digital: { requests: [{ protocol: "openid4vp-v1-unsigned", data: { response_type: "vp_token", nonce: "[some-nonce]", client_metadata: {...}, dcql_query: {...} } }] } }); // Decrypt payload respons and verify credentials on the backend const response = await fetch("/verify", { method: "POST", body: JSON.stringify(digitalCredential.data), headers: { 'Content-Type': 'application/json' } }); } catch (e) { // Handle errors, such as the user canceling the request console.error(e); }
예를 들어 사용자의 성, 이름, 사용자가 21세를 초과하는지 여부를 나타내는 불리언 값을 요청하려면 다음 페이로드를 지정하면 됩니다.
{
protocol: 'openid4vp-v1-unsigned',
data: {
response_type: 'vp_token',
nonce: '[some-nonce]',
// Contains the Verifier metadata values, including supported credential formats and response encryption public key
client_metadata: {
// Supported credential formats. Refer to the documentation for specific values
vp_formats_supported: {...},
// Public key(s). Refer to the documentation for more detail.
jwks: {...}
},
dcql_query: {
// A wallet will try to find credentials it holds that match these definitions.
credentials: [
{
// A locally unique identifier for this credential definition within the query.
id: "cred_vc",
format: "dc+sd-jwt",
meta: {
// 'vct_values' specifies the Verifiable Credential allowed type.
// In this case, it's a European Digital Identity (EUDI) Personal Identification Data (PID) credential.
vct_values: [
"urn:eudi:pid:1"
]
},
// 'claims' is an array of specific data that's being requested.
claims: [
{
// The path ["age_equal_or_over", "18"] corresponds to accessing `credential.age_equal_or_over['18']`.
path: [
"age_equal_or_over",
"18"
]
}
]
}
]
}
}
}
이 예에서 client_metadata
는 지원되는 형식 목록을 지정해야 합니다. 사용할 수 있는 값은 사양을 참고하세요. client_metadata
에 설정된 선택적 jwks
값에는 응답 암호화에 사용되는 공개 키가 포함되어야 합니다. 데모 코드에서 더 많은 예를 확인할 수도 있습니다.
다음은 암호화된 응답 페이로드의 DigitalCredential 객체 예시입니다.
{
// This is an example for a response using an OpenID4VP protocol.
// The format of the 'data' object will differ for other protocols.
"protocol": "openid4vp-v1-unsigned",
"data": {
// To decrypt this JWE payload, use the private key.
// The decrypted payload will be a JSON object containing the
// Verifiable Presentation in the 'vp_token' claim.
"response": "[jwe-token]"
}
}
이 예시에서 시스템은 openid4vp-v1-unsigned
프로토콜을 사용하여 사용자 인증 정보를 요청하고 응답에는 data
속성에 response
이 포함됩니다.
응답을 파싱하는 정확한 방법은 프로토콜에 따라 다릅니다. 일반적으로 다음을 수행해야 합니다.
- 응답 페이로드 복호화 복호화 방법은 사용된 프로토콜에 따라 다릅니다.
openid4vp
(JWE 사용) 및org-iso-mdoc
(하이브리드 공개 키 암호화 사용)의 페이로드를 복호화하는 방법을 참고하세요. - 서명 및 발급자 확인 자세한 내용은 디지털 사용자 인증 정보의 온라인 수락 문서를 참고하세요.
다양한 프로토콜의 코드 샘플을 확인하려면 데모 코드 또는 라이브 호스팅 버전을 확인하세요.
발급자의 신뢰 확인
디지털 사용자 인증 정보의 암호화 서명은 사용자 인증 정보가 진짜임을 증명합니다. 하지만 개발자는 발급자가 특정 사용 사례에 적합하고 신뢰할 수 있는지 확인해야 합니다. 예를 들어 대학생 할인 혜택을 부여하려면 전자상거래 사이트에서 공인된 대학에서 발급한 사용자 인증 정보가 필요하며 다른 기관에서 서명한 사용자 인증 정보는 거부됩니다. 발급자를 신뢰하는 일반적인 방법은 승인된 발급자 목록을 유지하고 일치하지 않는 발급자를 거부하는 것입니다.
시작하기
실무 경험을 쌓을 준비가 되셨나요? 다음 정보를 참고하세요.
- 가용성: Chrome 141 이상에서는 다양한 플랫폼에서 기본적으로 디지털 사용자 인증 정보 API를 사용 설정합니다.
- 기본 요건: 사용자는 호환되는 기기(예: Google Play 서비스 버전 24.0 이상을 실행하는 Android 또는 버전 26 이상을 실행하는 iOS 기기)가 필요합니다. 기기에 디지털 사용자 인증 정보 API를 지원하는 디지털 지갑 애플리케이션(예: Google 월렛 또는 데모 지갑)이 설치되어 있어야 합니다.
- 데모 사용해 보기: 사용자 환경을 이해하고 구현을 테스트하는 가장 좋은 방법은 Chrome 141 이상에서 https://verifier.multipaz.org의 라이브 데모를 사용해 보는 것입니다.
리소스
자세한 내용은 다음 리소스를 참고하세요.
- 개발자 가이드: 디지털 사용자 인증 정보 API
- 사양: W3C 디지털 사용자 인증 정보
- Android 지원: 디지털 인증서의 Android 지원
의견 공유
이제 디지털 사용자 인증 정보 API가 제공되므로 이를 사용한 빌드 경험에 관한 의견을 듣고 싶습니다. 문제를 신고하여 의견을 공유하거나 버그를 신고하세요.