> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 인증(Authentication): 최종 사용자 로그인, 패스키 및 세션

> Didit으로 최종 사용자 로그인을 구현하세요. 호스팅 페이지, 패스키, 코드, 소셜 및 SSO를 지원하며 신분증 인증·거래 모니터링과 연결됩니다.

> [!WARNING]
>
> 인증 기능은 새로운 기능입니다. Didit이 애플리케이션에 대해 이 제품을 활성화합니다. 그전까지는 해당 애플리케이션의 모든 런타임 라우트가 `404`를 반환합니다. 인증 SDK 패키지는 아직 배포되지 않았으므로, 이 페이지의 호스팅 흐름과 HTTP 계약을 사용하십시오.

인증은 고객을 **귀하의 애플리케이션**에 로그인시킵니다. 이는 Didit 콘솔에 로그인하거나 Didit 개발자 계정을 만드는 것과 별개입니다. 또한 사람의 신원을 확인하는 것과도 별개입니다.

인증만 단독으로 사용하거나, 신원 확인 및 거래 모니터링과 함께 사용할 수 있습니다. 로그인한다고 신원 확인이 승인되거나 결제가 허가되지는 않습니다. 각 제품의 고유한 결과에 따라 백엔드가 그러한 결정을 내립니다.

## 작동 방식

각 애플리케이션은 고유한 로그인 오리진과 고유한 토큰 발급자를 가집니다. 라이브 애플리케이션과 샌드박스 애플리케이션은 분리되어 있습니다. 오리진, 설정, 아이덴티티가 각각 분리되어 있습니다.

| 항목 | 값 |
| - | - |
| 기본 오리진 | 라이브 애플리케이션은 `https://<slug>.auth.didit.me`, 샌드박스 애플리케이션은 `https://<slug>.sandbox.auth.didit.me`입니다. 콘솔에 귀하의 오리진이 표시됩니다. 인증된 맞춤 도메인으로 대체할 수 있습니다. |
| 호스팅 페이지 | 해당 오리진의 `/sign-in`, `/magic`, `/invite`, `/reset`입니다. |
| 런타임 API | 같은 오리진입니다. 예: `POST {origin}/token/`, `GET {origin}/session/`. |
| 발급자 | 오리진 자체입니다. 디스커버리는 `{origin}/.well-known/openid-configuration`에 있습니다. |
| 게시 가능 키 | `pk_live_...` 또는 `pk_test_...`입니다. 애플리케이션을 식별하며, 비밀 값이 아닙니다. |

흐름은 PKCE(`S256`만 해당)를 사용하는 OAuth 2.0 인가 코드 방식입니다.

1. 앱이 `redirect_uri`, `state`, `code_challenge`, `code_challenge_method=S256`을 포함하여 `{origin}/sign-in`을 엽니다.
2. 호스팅 페이지가 설정한 인증 방식을 사용하여 사용자를 로그인 또는 가입시키며, 필요한 2단계 인증도 포함됩니다.
3. 브라우저가 `code`와 `state`를 담아 사용자의 `redirect_uri`로 돌아갑니다.
4. 앱이 `POST {origin}/token/`에서 코드를 교환하여 액세스 토큰, ID 토큰, 리프레시 토큰을 받습니다.

토큰 계약은 [토큰 및 JWKS](https://docs.didit.me/ko/authentication/tokens-and-jwks.md)를, 각 인증 방식은 [로그인 방식](https://docs.didit.me/ko/authentication/sign-in-methods.md)을 참조하십시오.

## 플랫폼 선택

> [card] [JavaScript](https://docs.didit.me/ko/authentication/quickstarts/javascript.md)
>
> 호스팅 로그인, 콜백, 세션, 로그아웃.

> [card] [React](https://docs.didit.me/ko/authentication/quickstarts/react.md)
>
> 클라이언트 상태와 보호된 애플리케이션 뷰.

> [card] [Next.js](https://docs.didit.me/ko/authentication/quickstarts/nextjs.md)
>
> 서버 세션, 콜백 라우트, 쿠키.

> [card] [iOS](https://docs.didit.me/ko/authentication/quickstarts/ios.md)
>
> 시스템 브라우저와 보안 토큰 저장소.

> [card] [Android](https://docs.didit.me/ko/authentication/quickstarts/android.md)
>
> 브라우저 인가와 앱 콜백.

> [card] [React Native](https://docs.didit.me/ko/authentication/quickstarts/react-native.md)
>
> 네이티브 인증 래퍼 준비.

> [card] [Flutter](https://docs.didit.me/ko/authentication/quickstarts/flutter.md)
>
> 네이티브 인증 래퍼 준비.

## 애플리케이션 준비

1. 애플리케이션의 인증 기능을 켜도록 Didit에 요청하십시오. 먼저 샌드박스 애플리케이션에서 테스트하십시오.
2. 정확한 [리디렉션 URL](#리디렉션-url)(최대 50개)과 런타임 API를 호출하는 브라우저용 `allowed_origins`(최대 50개)를 등록하십시오.
3. 제공하려는 [로그인 방식](https://docs.didit.me/ko/authentication/sign-in-methods.md)을 활성화하십시오. Didit ID Wallet은 항상 켜져 있습니다.
4. 세션 및 비밀번호 설정을 선택하십시오(아래 참조).
5. 프로덕션 환경에 배포하기 전에 가입, 로그인, 비밀번호 찾기, MFA, 세션 만료, 로그아웃을 테스트하십시오.

패스키는 해당 오리진에 종속됩니다. 나중에 맞춤 도메인을 활성화하면 사용자는 패스키를 다시 등록해야 합니다.

## 리디렉션 URL

Didit은 사용자를 등록된 주소로만 리디렉션합니다.
콘솔의 **Authentication > Security and sessions > Redirect URLs and allowed origins**에서 주소를 등록하십시오.

로그인 요청의 `redirect_uri`는 등록된 URL과 문자 단위로 정확히 일치해야 합니다. 스킴, 호스트, 포트, 경로, 쿼리가 모두 같아야 합니다.
포트가 다르거나, 끝에 슬래시가 있거나, 대소문자가 다르면 다른 주소로 취급됩니다.

| 애플리케이션 | 등록할 수 있는 항목 |
| - | - |
| 라이브 | `https://` URL |
| 샌드박스 | `https://` URL, 그리고 `localhost`, `127.0.0.1`, `[::1]`의 `http://` URL |

와일드카드, 프래그먼트, URL에 포함된 자격 증명, 사용자 지정 스킴은 거부됩니다.

주소가 등록되어 있지 않으면 Didit은 절대 그 주소로 리디렉션하지 않습니다.
`{origin}/sign-in`은 무엇을 어디에 등록해야 하는지 설명하는 페이지와 함께 `400`을 반환하고, `POST {origin}/authorize/`는 `400 {"error": "invalid_redirect_uri"}`를 반환합니다.

### 로컬 개발

샌드박스 애플리케이션으로 자신의 컴퓨터에서 테스트하십시오.

1. 포트를 포함하여 콜백을 등록하십시오. 예: `http://localhost:3000/auth/callback`.
2. 브라우저 코드가 런타임 API를 호출하는 경우(예: `POST {origin}/token/`에서 코드 교환), **Allowed origins**에도 오리진을 추가하십시오. 예: `http://localhost:3000`. 경로와 끝 슬래시는 넣지 마십시오.
3. `pk_test_...` 키를 사용하여 샌드박스 오리진 `https://<slug>.sandbox.auth.didit.me`에서 로그인을 시작하십시오.

`localhost`, `127.0.0.1`, `[::1]`은 서로 다른 주소이며, 포트마다 별도의 주소입니다.
사용하는 각 주소를 모두 등록하십시오.

라이브 애플리케이션은 `http://`를 절대 허용하지 않습니다.
프로덕션 환경에 배포하기 전에 라이브 애플리케이션에 프로덕션 `https://` 콜백을 등록하십시오.

## 애플리케이션 설정

이 설정은 콘솔에서 관리하거나, `write:authentication` 권한이 있는 승인된 콘솔 세션으로 관리합니다.

| 설정 | 값 | 기본값 |
| - | - | - |
| `session_lifetime` | `86400`, `604800`, `2592000`, `7776000`초 | `2592000` (30일) |
| `idle_timeout` | `1800`, `7200`, `86400`, `604800`초 | `86400` (1일) |
| `multiple_sessions` | `false`이면 새로 로그인할 때마다 해당 사람을 다른 세션에서 로그아웃시킵니다 | `true` |
| `password_min_length` | `8`, `10`, `12`, `14` | `10` |
| `revoke_on_password_change` | 비밀번호 재설정 후 모든 세션을 종료합니다 | `true` |
| `signup_policy` | `anyone`, `invited`, `allowed_domains` (`allowed_email_domains`와 함께, 최대 100개) | `anyone` |
| `allow_subaddresses` | 이메일 로컬 부분에 `+`를 허용합니다 | `false` |
| `post_logout_redirect_uri` | 로그아웃 후 앱이 사람을 보내는 위치 | 비어 있음 |
| `mfa_policy` | `optional`, `everyone`, `organization_admins` | `organization_admins` |
| `sign_in_ui` | `hosted` 또는 `own` | `hosted` |

## 여러 제품에서 한 사람 유지하기

모든 신원에는 `vendor_data` 값이 포함됩니다. 이 값은 사람을 [가져올 때](https://docs.didit.me/ko/authentication/migration.md) 제공한 `external_id`이거나, 그렇지 않은 경우 Didit 신원 ID입니다. 이 값은 액세스 토큰, ID 토큰, `GET session/`에 나타납니다.

인증 세션을 생성하고 거래를 제출할 때 같은 값을 `vendor_data`로 사용하십시오. 그러면 Authentication 이벤트가 콘솔에서 해당 사람의 인증 및 거래와 동일한 사람의 기록에 추가됩니다. [이벤트 및 webhook](https://docs.didit.me/ko/authentication/events-and-webhooks.md)을 참조하십시오.

`vendor_data`는 검증된 토큰에서 백엔드가 도출해야 하며, 확인되지 않은 브라우저 필드에서 가져와서는 안 됩니다.

| 제품 조합 | 구축할 내용 |
| - | - |
| Authentication | 로그인, 세션 검증, 로그아웃. |
| 신원 인증 + Authentication | 정책상 필요한 경우 로그인 후 토큰의 `vendor_data`로 신원 인증을 시작합니다. |
| 거래 모니터링 + Authentication | 로그인한 사람의 `vendor_data`로 거래를 제출합니다. 로그인 이벤트는 같은 사람의 타임라인과 규칙에 반영됩니다. |
| 세 가지 모두 | 사람마다 `vendor_data` 하나. 각 제품의 결정은 별도로 처리합니다. |

어떤 조합이든 [공통 연동 프롬프트](https://docs.didit.me/ko/integration/integration-prompt.md)를 사용하십시오. 로그인 시 실행되는 정책은 [봇 방지](https://docs.didit.me/ko/authentication/bot-protection.md)를 읽어 보십시오.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.