매직 링크 인증
일회용 토큰을 사용하여 비밀번호 없는 로그인, 초대 전용 등록, 조직 멤버 초대를 위한 매직 링크 구현 방법을 배워보세요.
일회용 토큰을 사용하여 비밀번호 없는 로그인, 초대 전용 등록, 조직 멤버 초대를 위한 매직 링크 구현 방법을 배워보세요.
매직 링크는 비밀번호 없는 인증 방법으로, 사용자가 이메일(또는 SMS)을 통해 일회용 로그인 URL을 받는 것을 의미합니다. 링크를 클릭하면 비밀번호 없이 로그인됩니다.
매직 링크의 주요 보안 기능은 다음과 같습니다:
매직 링크는 다음으로 구성됩니다:
예를 들어, 매직 링크는 다음과 같이 보일 수 있습니다:
매직 링크를 생성하려면 일회용 토큰을 생성하고, 이를 사용자에게 안전하게 전송한 뒤 사용자가 링크를 클릭했을 때 이를 검증해야 합니다.
Logto 관리 API를 사용하여 일회용 토큰을 생성합니다.
샘플 요청 본문 페이로드:
일회용 토큰을 받은 후, 귀하의 애플리케이션의 랜딩 페이지로 이동하도록 토큰과 사용자 이메일을 매개변수로 포함한 매직 링크를 작성하여 최종 사용자의 이메일 주소로 보낼 수 있습니다. 예: https://yourapp.com/landing-page.
여기 매직 링크의 간단한 예시가 있습니다:
참고:
매직 링크의 매개변수 이름은 완전히 사용자 정의할 수 있습니다. 귀하의 애플리케이션 요구사항에 따라 추가 정보를 추가할 수 있으며 URL의 모든 매개변수를 인코딩할 수 있습니다.
최종 사용자가 매직 링크를 클릭하고 귀하의 애플리케이션으로 이동한 후 URL에서 token과 email 매개변수를 추출하여 Logto SDK의 signIn() 함수를 호출하여 인증 흐름을 트리거할 수 있습니다.
자세한 사항은 Logto 문서 - 매직 링크 (일회용 토큰)를 참조하세요.
매직 링크는 첫 번째 인증 단계의 대체 기능이지만 다중 요소 인증 (MFA)을 우회할 수는 없습니다.
Logto에서는 일회용 토큰을 사용하여 매직 링크를 생성할 때 그 링크가 로그인이나 가입을 위한 것인지 명시할 필요가 없습니다. 우리는 이메일 등록 상태에 따라 자동으로 흐름을 결정합니다:
Logto는 매직 링크와 함께 다음 시나리오를 지원합니다:
현재 미지원:
더욱 맞춤화가 필요하시면 알려주세요.
새 제품(예: AI 도구)의 내부 테스트 또는 내부 도구의 경우 공개 등록을 비활성화하고 특정 사용자에게만 애플리케이션 접근을 허용하고자 할 수 있습니다. Logto를 활용하여 이를 구현하는 방법:
콘솔 > 로그인 경험 > 로그인 및 가입 > 고급 옵션으로 이동하여 "사용자 등록 활성화"를 꺼서 공개 등록을 닫습니다.

초대하고 싶은 사용자의 이메일 주소를 수집합니다(예: 웹사이트 또는 기존 사용자의 추천을 통해).
위에 설명된 대로 매직 초대 링크를 생성 및 전송합니다 (일회용 토큰 요청, 매직 링크 작성, Logto SDK를 통한 인증 트리거).
참고: 초대 링크의 만료 시간을 설정합니다. 링크가 최소 하루 동안 유효하도록 설정하는 것이 좋습니다. 일회용 토큰을 생성하기 위해 다음 요청 본문을 사용합니다:
사용자 이메일로 매직 링크를 전송합니다(예: https://yourapp.com/landing-page?type=registrationInvitation&token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&[email protected]). 이메일 템플릿을 다음과 같이 사용자 정의하세요:

사용자가 "초대 수락"을 클릭하면, 공개 등록이 비활성화된 상태에서도 자동으로 서비스에 등록됩니다. 이를 "표적 사용자 초대"라고 합니다.
다중 테넌트 제품(예: Slack, GitHub, Vercel 같은 SaaS 앱)의 경우, 조직 멤버십을 쉽게 관리할 수 있도록 매끄러운 멤버 초대 프로세스를 제공합니다. 멤버 초대에서 높은 전환율을 위해 매직 링크를 사용하세요.
Logto Docs를 참조하여 조직 생성, 조직 역할 기반 액세스 제어 및 조직 관리를 구현하세요: Logto Organizations.
제품 내 "멤버 초대" 워크플로우를 설정합니다. 예:

조직 멤버 초대를 위한 이 안내서를 따릅니다. 참고: 멤버를 초대할 때 요청 페이로드에 다음이 포함되도록 합니다:
context: jitOrganizationIds**를 포함하여 사용자가 가입할 조직을 지정합니다.expiresIn 시간을 설정합니다 (예: 2일 또는 1주일).요청 페이로드 예시:
사용자의 이메일로 초대 링크를 보냅니다(예: https://yourapp.com/landing-page?type=organizationMemberInvitation&token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&[email protected]). 이메일 템플릿을 다음과 같이 사용자 정의하세요:

사용자가 **"초대 수락"**을 클릭하면, 자동으로 로그인되거나 가입하여 조직에 자동으로 가입하게 됩니다.
기존 계정으로 이미 로그인된 사용자가 다른 매직 링크를 클릭하면 어떻게 되나요?
계정 충돌을 올바르게 처리하기 위해 다음을 확인하십시오:
login 추가를 피하세요: 로그인 프롬프트에서 login을 포함하지 마십시오. 설정이 잘못되면 Logto는 매직 링크 토큰과 연결된 계정으로 자동 로그인하여 계정 전환 프롬프트를 우회합니다.signIn() 함수를 호출할 때 clearTokens: false 매개변수를 지정하여 기존 토큰을 제거하지 않도록 합니다. 이 옵션을 사용할 경우 수동으로 토큰 제거를 로그인 콜백 페이지에서 수행하는 것을 확인하십시오.적절한 설정 후 사용자 경험은 다음과 같습니다:

사용자가 무효화된 매직 링크를 클릭하는 경우, 문제에 대해 명확히 설명하는 오류 페이지로 리디렉션됩니다. 가능한 오류 시나리오와 메시지는 다음과 같습니다:
| 이름 | 설명 |
|---|---|
| token_not_found | 주어진 이메일 및 토큰으로 활성화된 토큰을 찾을 수 없습니다. |
| email_mismatch | 주어진 토큰과 이메일이 일치하지 않습니다. |
| token_expired | 토큰이 만료되었습니다. |
| token_consumed | 토큰이 소비되었습니다. |
| token_revoked | 토큰이 취소되었습니다. |
| cannot_reactivate_token | 토큰을 다시 활성화할 수 없습니다. |
각 오류 페이지는 사용자가 무효화된 매직 링크 뒤에 있는 이유를 이해하고 다음 단계로 안내 받을 수 있도록 구체적인 메시지를 제공합니다. 예를 들어:

Logto는 매직 링크를 통한 유연하고 비밀번호 없는 로그인 흐름을 통해 엔터프라이즈 수준의 보안을 제공합니다. 이는 조직에 사용자를 초대하거나, 사용자 계정을 손쉽게 생성하게 하거나, 번거로움 없는 인증을 제공하는 간단하지만 강력한 방법입니다. 그리고 Logto는 계정 충돌 및 만료된 토큰과 같은 복잡한 상황을 처리하기 때문에 사용자에게 매번 안전하고 불만 없는 과정을 제공합니다.
당신의 IAM을 탄탄한 인증으로 현대화할 준비가 되셨나요?