대시보드
인증

OAuth 앱

서비스가 프로젝트 사용자에게 범위 지정 액세스를 요청하도록 허용합니다.

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-state

GET 엔드포인트는 클라이언트, 리디렉션 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 챌린지에 바인딩됩니다.

POST/api/v1/auth/oauth/token

Authorization-code 새로 고침 토큰 부여.

#사용자 정보 및 범위

GET/api/v1/auth/oauth/userinfo

OAuth 액세스 토큰을 전달자 토큰으로 보냅니다. HALO는 프로젝트 사용자 정보를 반환하기 전에 프로젝트, 앱, 대상, 토큰 사용, 사용자 상태 및 범위를 검증합니다.