OAuth 앱은 프로젝트 인증을 인증 서버로 전환합니다. 서비스를 위해. 로그인한 프로젝트 사용자는 앱에 사용자 비밀번호나 업스트림 소셜 공급자 토큰을 제공하지 않고도 앱의 명시적 범위를 승인할 수 있습니다.
#OAuth 앱이란 무엇인가요?
#앱 등록
프로젝트 인증 UI에서 이름, 클라이언트 유형, 홈페이지, 정확한 리디렉션 URI 및 허용 범위를 추가합니다.
| 클라이언트 유형 | 비밀 | PKCE |
|---|---|---|
| 공개 | 배포 가능한 클라이언트 비밀번호 없음 | S256 필수 |
| 기밀 | 토큰 교환에 필요한 클라이언트 비밀번호 | 지원 및 권장 |
클라이언트 비밀번호는 한 번 표시됩니다. 순환하면 해당 앱에 대한 기존 OAuth 토큰이 취소됩니다.
#승인 흐름
GET https://api.agihalo.com/api/v1/auth/oauth/authorize
?client_id=halo_client_...
&redirect_uri=https%3A%2F%2Fservice.example.com%2Fcallback
&scope=profile%20email
&state=opaque-client-stateGET 엔드포인트는 클라이언트, 리디렉션 URI 및 요청된 범위의 유효성을 검사한 다음 동의 UI에 대한 앱 세부정보를 반환합니다. 사용자가 승인한 후 프로젝트 사용자 액세스 토큰을 사용하여 POST 엔드포인트를 호출합니다.
curl -X POST https://api.agihalo.com/api/v1/auth/oauth/authorize \
-H "Authorization: Bearer $PROJECT_USER_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"client_id": "halo_client_...",
"redirect_uri": "https://service.example.com/callback",
"scopes": ["profile", "email"],
"state": "opaque-client-state",
"code_challenge": "S256_CHALLENGE",
"code_challenge_method": "S256"
}'응답에는 redirectTo가 포함되어 있습니다. 서비스가 code 및 원본state.
#토큰 교환
curl -X POST https://api.agihalo.com/api/v1/auth/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "authorization_code",
"client_id": "halo_client_...",
"code": "halo_code_...",
"redirect_uri": "https://service.example.com/callback",
"code_verifier": "ORIGINAL_PKCE_VERIFIER"
}'기밀 클라이언트는 client_secret도 보냅니다. 인증 코드는 일회성이며 등록된 클라이언트, 리디렉션 URI, 프로젝트 사용자, 범위 및 선택적 S256 챌린지에 바인딩됩니다. client_secret도 보냅니다. 인증 코드는 일회성이며 등록된 클라이언트, 리디렉션 URI, 프로젝트 사용자, 범위 및 선택적 S256 챌린지에 바인딩됩니다.
/api/v1/auth/oauth/tokenAuthorization-code 새로 고침 토큰 부여.
#사용자 정보 및 범위
/api/v1/auth/oauth/userinfoOAuth 액세스 토큰을 전달자 토큰으로 보냅니다. HALO는 프로젝트 사용자 정보를 반환하기 전에 프로젝트, 앱, 대상, 토큰 사용, 사용자 상태 및 범위를 검증합니다.