1. 개요
사용자가 웹사이트와 Android 앱 모두에서 서비스에 액세스하나요? 각 플랫폼에서 별도로 로그인하도록 강제하면 불필요한 마찰이 발생하고 이탈로 이어질 수 있습니다.
디지털 애셋 링크 (DAL)는 웹사이트와 앱 간의 연결을 선언할 수 있도록 하여 이 문제를 해결합니다. 이를 통해 Google 비밀번호 관리자와 같은 비밀번호 관리자가 저장된 비밀번호와 패스키를 서로 공유할 수 있습니다.
특히 디지털 애셋 링크 파일을 구성하려면 공유하려는 항목에 따라 다른 관계가 필요합니다.
- 비밀번호:
delegate_permission/common.get_login_creds를 포함하면 비밀번호 관리자가 웹사이트와 앱 간에 저장된 비밀번호를 공유할 수 있습니다. - 패스키: 패스키는 특정 웹 도메인에 엄격하게 바인딩되므로 Android에서는 도메인 소유권 증명이 필요합니다. 따라서
delegate_permission/common.handle_all_urls을 포함해야 합니다. 이 권한은 Android App Links (딥 링크)에 사용되는 권한으로 인식될 수 있지만, 한 플랫폼에서 생성된 패스키를 다른 플랫폼에서 사용할 수 있도록 허용하는 엄격한 요구사항이기도 합니다.
그 결과 사용자는 하나의 플랫폼에만 저장된 비밀번호 또는 패스키를 사용하여 제휴 플랫폼 전반에서 원활하게 로그인할 수 있습니다.

원활한 사용자 인증 정보 공유를 구현하면 사용자 환경을 크게 개선할 수 있습니다. 예를 들어 eBay는 사용자 인증 정보 공유를 위해 DAL을 구현한 후 로그인 성공률이 10% 증가했습니다.
이 Codelab에서는 디지털 애셋 링크를 사용하여 웹사이트와 Android 앱 간에 사용자 인증 정보를 공유하는 방법을 알아봅니다.
기본 요건
- JSON 및 Android 개발에 관한 기본 지식
- Android Credential Manager 기본 요건을 숙지해야 합니다.
학습할 내용
- Google Play Console을 사용하여 사용자 인증 정보 공유를 설정하는 방법 (권장)
assetlinks.json파일을 수동으로 만드는 방법- 수동 연결을 위해 Android 앱을 구성하는 방법
- 웹사이트 도메인과 연결하여 Android 앱에서 패스키를 사용 설정하는 방법
- 도구를 사용하여 설정을 생성하고 검증하는 방법
필요한 항목
- 웹사이트:
https://{your-domain}/.well-known/assetlinks.json에 JSON 파일을 호스팅할 수 있어야 합니다. - Android 앱:
- Play Console 방법: Google Play에 게시된 앱
- 수동 방법: 수정하고 빌드할 수 있는 Android 프로젝트 Google 비밀번호 관리자와 사용자 인증 정보를 공유하려면 앱이 Google Play에 게시되어 있어야 합니다.
작동 방식
사용자 인증 정보 공유가 작동하려면 양방향 신뢰를 설정해야 합니다.
- 웹 -> 앱: 웹사이트에서 Android 앱을 신뢰한다고 선언하는
assetlinks.json파일을 호스팅해야 합니다. - 앱 -> 웹: Android 앱이 웹사이트를 신뢰하도록 구성되어 있어야 합니다.
Google Play Console을 사용하는 자동 방식 (권장)과 디지털 애셋 링크를 직접 사용하는 수동 방식의 두 가지 방법을 살펴보겠습니다.
2. Google Play Console을 사용하여 설정 (권장)
웹사이트와 Android 앱 간에 사용자 인증 정보 공유를 사용 설정하는 가장 쉬운 방법은 Google Play Console을 사용하는 것입니다. 이 방법을 사용하면 앱의 매니페스트를 수정하거나 앱의 새 버전을 게시하지 않고도 앱을 웹사이트와 연결할 수 있습니다. Google Play에서 앱 측 연결을 관리합니다.
기본 요건
- 딥 링크 페이지에 액세스할 수 있는 Play Console 권한
- 도메인에
/.well-known/assetlinks.json파일을 게시할 수 있어야 합니다.
딥 링크에 관한 자세한 내용은 Android App Links를 참고하세요.
단계
- Play Console에서 성장 > 딥 링크로 이동합니다.
- 도메인이 목록에 없으면 앱 구성 아래의 도메인 추가를 클릭합니다.
- 도메인을 찾아 사용자 인증 정보 공유 열을 찾습니다. 사용 설정을 클릭합니다 (또는 새 도메인의 경우 사용자 인증 정보 공유 사용 설정이 사용 설정되어 있는지 확인).
- Play Console에서 생성된 JSON 스니펫을 복사합니다.
- 이 JSON 콘텐츠를
https://{your-domain}/.well-known/assetlinks.json에 게시합니다. (이 파일이 이미 있는 경우 새 문장을 추가하세요.) - Play Console로 돌아가 웹사이트 연결 만들기 또는 사용자 인증 정보 공유 사용 설정을 클릭합니다.
이제 Play Console에서 호스팅 설정을 확인합니다.

사용자 인증 정보 공유가 작동하려면 웹사이트 호스트가 다음 요구사항을 충족해야 합니다.
- URL에 HTTPS를 통해 액세스할 수 있습니다.
- 서버가
Content-Type: application/json로 응답합니다. - 리디렉션 없이 URL에 액세스할 수 있습니다.
인증이 완료되면 사용자 인증 정보 공유가 활성화됩니다. 구성 변경사항이 전파되는 데 1~2주가 걸릴 수 있습니다.
3. 디지털 애셋 링크를 사용하여 수동으로 설정
세부적인 관리를 원하는 경우 또는 Play Console에 액세스할 수 없나요? 웹사이트와 Android 앱 간의 사용자 인증 정보 공유를 수동으로 구성할 수 있습니다. 여기에는 사이트에 JSON 파일을 호스팅하고 Android 앱 매니페스트를 업데이트하는 두 가지 주요 작업이 포함됩니다.
1. 앱의 디지털 지문 가져오기
원활한 사용자 인증 정보 공유를 설정하기 전에 각 플랫폼에 다음이 있는지 확인하세요.
각 Android 앱의 경우:
- 앱의
build.gradle파일에 선언된 Android 애플리케이션 ID입니다. - 서명 인증서의 SHA256 지문입니다.
- (권장) Credential Manager API로 구현된 사용자 로그인
2. 연결 파일 만들기
웹사이트와 앱 간의 관계를 선언하는 assetlinks.json 파일을 만들어야 합니다. delegate_permission/common.get_login_creds를 사용하여 비밀번호 공유 권한을 부여하고 delegate_permission/common.handle_all_urls를 사용하여 딥 링크를 사용 설정하고 패스키를 공유합니다.
다음 콘텐츠를 포함한 assetlinks.json 파일을 만듭니다. 예시 값을 사이트 URL, 패키지 이름, 지문으로 바꿉니다.
[{
"relation": [
"delegate_permission/common.handle_all_urls",
"delegate_permission/common.get_login_creds"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
3. 파일 호스팅
assetlinks.json 파일을 도메인의 루트에 있는 .well-known 디렉터리에 업로드합니다.
위치: https://{your-domain}/.well-known/assetlinks.json
사용자 인증 정보 공유가 작동하려면 웹사이트 호스트가 다음 요구사항을 충족해야 합니다.
- URL에 HTTPS를 통해 액세스할 수 있습니다.
- 서버가
Content-Type: application/json로 응답합니다. - 리디렉션 없이 URL에 액세스할 수 있습니다.

4. Android 앱 구성
이제 Android 앱이 웹사이트를 신뢰하도록 지시합니다. assetlinks.json URL이 포함된 리소스 파일을 가리키는 참조를 매니페스트에 추가합니다.
1. 문자열 리소스 추가
res/values/strings.xml에서 새 문자열 asset_statements을 추가합니다. 이스케이프된 따옴표를 확인하세요.
<resources>
<string name="asset_statements" translatable="false">
[{
\"include\": \"https://www.example.com/.well-known/assetlinks.json\"
}]
</string>
</resources>
2. 매니페스트에 메타데이터 추가
AndroidManifest.xml에서 이 문자열 리소스를 참조하는 <application> 요소 내에 <meta-data> 태그를 추가합니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<meta-data
android:name="asset_statements"
android:resource="@string/asset_statements" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
이 단계를 완료하고 새 버전의 Android 앱을 게시하면 디지털 애셋 링크를 지원하는 비밀번호 관리자 (예: Google 비밀번호 관리자)가 사용자가 com.example.app에 로그인하려고 할 때 www.example.com에 저장된 사용자 인증 정보를 제안할 수 있으며 그 반대의 경우도 마찬가지입니다.
4. 설정 확인
배송하기 전에 디지털 애셋 링크 구성을 확인하는 것이 중요합니다. 잘못된 JSON 또는 연결할 수 없는 파일은 자동으로 실패합니다.
공식 명령문 생성기 및 검사기 도구를 사용합니다.

- 사이트 도메인과 앱 패키지 이름을 입력합니다.
- 테스트 문장을 클릭합니다.
- 이 도구는
assetlinks.json파일이 올바르게 호스팅되고 유효한 연결이 포함되어 있는지 확인합니다.
5. 여러 웹사이트 간 사용자 인증 정보 공유

동일한 로그인 시스템을 공유하는 웹사이트가 여러 개 있는 경우 (예: example.com 및 example.co.uk) 사용자 인증 정보가 웹사이트 간에 공유될 수 있도록 제휴사로 선언할 수 있습니다.
여러 웹사이트 간에 비밀번호 공유
웹사이트 간에 비밀번호를 공유하려면 delegate_permission/common.get_login_creds를 사용하여 web-web 연결을 선언하면 됩니다.
예를 들어 example.com가 example.co.uk와 비밀번호를 공유하려면 https://example.com/.well-known/assetlinks.json에 호스팅된 assetlinks.json 파일에 example.co.uk을 타겟팅하는 문이 포함되어야 합니다.
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://example.co.uk"
}
}]
마찬가지로 https://example.co.uk/.well-known/assetlinks.json에는 example.com을 타겟팅하는 문이 포함되어야 합니다.
여러 웹사이트 간에 패스키 공유
여러 웹사이트가 동일한 패스키를 공유하려면 동일한 신뢰 당사자 ID (RP ID)를 사용해야 합니다. WebAuthn 및 패스키에서 RP ID는 도메인 이름으로 사용자 인증 정보의 범위를 지정합니다. 패스키를 만들면 특정 RP ID에 연결되며 해당 ID의 범위에 속하는 도메인에서만 사용할 수 있습니다. RP ID를 올바르게 정의하면 하위 도메인, 교차 사이트 출처, 퍼스트 파티 모바일 앱에서 원활한 패스키 환경을 보장할 수 있습니다. 신뢰 당사자 ID (RP ID) 이해에서 RP ID 설정에 대해 자세히 알아볼 수 있습니다. 관련 출처 요청을 사용하면 한 웹사이트에서 RP ID를 사용할 수 있는 다른 출처를 지정하여 사용자가 운영하는 여러 사이트에서 동일한 패스키를 재사용할 수 있습니다. 이는 디지털 애셋 링크에서 delegate_permission/common.handle_all_urls를 사용하는 웹사이트와 Android 앱 간의 패스키 공유와는 다릅니다.
예를 들어 example.com와 example.co.uk가 패스키를 공유하도록 하려면 example.com를 표준 RP ID로 결정하면 됩니다. 이 작업을 수행하려면 example.co.uk가 WebAuthn API 호출에서 rpId: 'example.com'을 사용해야 하고 example.com가 https://example.com/.well-known/webauthn에 파일을 호스팅하여 example.co.uk를 허용 목록에 추가해야 합니다.
{
"origins": [
"https://example.co.uk"
]
}
이를 통해 example.co.uk는 example.com와 연결된 패스키를 만들고 사용할 수 있습니다.
6. 결론
축하합니다. 원활한 사용자 인증 정보 공유를 설정했습니다.
이제 사용자는 웹사이트에 비밀번호와 패스키를 저장하고 이를 사용하여 탭 한 번으로 Android 앱에 로그인할 수 있습니다 (그 반대도 가능). 이 간단한 변경으로 로그인 전환율과 사용자 만족도를 크게 높일 수 있습니다.
다음 단계
- 디지털 애셋 링크 공식 문서를 확인하세요.
- 사용자 인증 정보 공유 기본사항에 대해 자세히 알아보세요.
- eBay 우수사례를 읽고 그 효과를 확인하세요.