프로젝트에서는 Google, Apple, GitHub 및 Microsoft 로그인을 활성화할 수 있습니다. HALO는 업스트림 콜백 교환을 소유하고, 애플리케이션은 허용 목록에 있는 클라이언트 콜백에서 수명이 짧은 일회성 코드를 받습니다.
#프로젝트 콜백 URL
https://api.agihalo.com/api/v1/auth/projects/{PROJECT_ID}/providers/{PROVIDER}/callback#지원되는 제공자
| 공급자 | 업스트림 애플리케이션 | 콜백 방법 |
|---|---|---|
| OAuth 웹 애플리케이션 | GET | |
| Apple | 서비스 ID / Apple로 로그인 | POST 양식 응답 |
| GitHub | OAuth 앱 | GET |
| Microsoft | 앱 등록/웹 리디렉션 | GET |
HALO에 클라이언트 ID와 비밀번호를 저장하고 공급자 범위를 선택한 다음 로그인을 활성화하세요. 저장된 비밀은 암호화되어 결코 반환되지 않습니다.
#브라우저 + PKCE 흐름
// 1. Create an S256 PKCE verifier/challenge in your app.
const url = new URL(
"https://api.agihalo.com/api/v1/auth/providers/google/authorize"
);
url.searchParams.set("apikey", HALO_PROJECT_PUBLISHABLE_KEY);
url.searchParams.set("redirect_to", "https://app.example.com/auth/callback");
url.searchParams.set("code_challenge", codeChallenge);
url.searchParams.set("code_challenge_method", "S256");
url.searchParams.set("state", clientState);
window.location.assign(url.toString());- 1앱이 인증을 시작합니다
게시 가능한 키, 허용 목록에 있는 클라이언트 콜백, 상태 및 S256 챌린지를 사용하여 HALO 공급자 인증 URL을 엽니다.
- 2HALO가 공급자에게 호출
HALO는 일회성 상태를 저장하고, 공급자 요청을 보내고, 프로젝트별 콜백을 받습니다.
- 3콜백이 코드를 수신합니다.
HALO는 다음을 사용하여 정확한 클라이언트 콜백으로 리디렉션합니다. 수명이 짧은 코드와 원래 상태.
- 4앱이 코드를 교환합니다
프로젝트 사용자 세션을 수신하려면 원래 검증자와 리디렉션 URL을 보냅니다.
#보안 동작
- 승인 및 콜백 응답은 비저장 정책을 사용합니다.
- 리디렉션 URL은 프로젝트 구성과 정확하게 일치해야 합니다.
- 상태 코드와 일회성 코드는 한 번 소모되고 만료됩니다.
- 확인되지 않은 제공자 이메일 및 프로젝트 간 ID 충돌이 실패 처리됩니다.