이 페이지 내용

인증 및 권한 부여

마크다운

Glossia가 사용자를 인증하고 API 접근 권한을 부여하는 방식입니다.

인증 방식

Glossia는 사용 환경에 따라 두 가지 인증 방식을 지원합니다.

브라우저 세션

웹 인터페이스에서 로그인하면 Glossia는 세션 기반 인증을 사용합니다. Assent 라이브러리를 통해 타사 제공업체(GitHub 또는 GitLab)로 인증합니다. 로그인에 성공하면 세션 쿠키가 설정되며 이후 요청에 사용됩니다.

베어러 토큰 (OAuth 2.1)

명령줄 인터페이스 또는 기타 도구를 통한 API 접근의 경우 Glossia는 인증 코드 흐름과 PKCE를 사용하는 OAuth 2.1을 구현합니다. 클라이언트는 베어러 토큰을 발급받아 Authorization 헤더에 포함합니다.

Authorization: Bearer <access_token>

OAuth 2.1 흐름

1. 동적 클라이언트 등록

클라이언트는 메타데이터와 함께 POST /oauth/register을 호출하여 자체 등록합니다. 이 과정은 RFC 7591을 따릅니다.

{
"client_name": "My Tool",
"redirect_uris": ["http://localhost:8080/callback"],
"grant_types": ["authorization_code"]
}

서버는 client_idclient_secret을 반환합니다.

2. 권한 부여 요청

클라이언트는 PKCE 매개변수와 함께 사용자를 /oauth/authorize로 리디렉션합니다.

GET /oauth/authorize?response_type=code&client_id=<id>&redirect_uri=<uri>&code_challenge=<challenge>&code_challenge_method=S256&state=<state>

모든 클라이언트에 PKCE가 필요합니다. S256 챌린지 방식만 지원됩니다.

3. 토큰 교환

사용자가 승인하면 클라이언트는 POST /oauth/token에서 인증 코드를 토큰으로 교환합니다.

POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=<code>&redirect_uri=<uri>&client_id=<id>&code_verifier=<verifier>

응답에는 액세스 토큰과 선택적으로 새로 고침 토큰이 포함됩니다.

4. 토큰 새로 고침

액세스 토큰이 만료되면 새로 고침 토큰을 사용합니다.

POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=<token>&client_id=<id>&client_secret=<secret>

범위

범위는 토큰이 수행할 수 있는 작업을 제어합니다. object:action 패턴을 따릅니다.

범위 설명
user:read 사용자 프로필 정보 읽기
user:write 사용자 프로필 업데이트
account:read 접근 가능한 조직 계정 목록 조회
organization:read 조직 세부 정보 읽기 및 소속 조직 목록 조회
organization:write 조직 생성 또는 업데이트
organization:delete 조직 삭제
organization:admin 조직 관리 작업 수행
members:read 조직 구성원 및 초대 읽기
members:write 조직 구성원 및 초대 관리
project:read 프로젝트 읽기
project:write 프로젝트 생성 또는 업데이트
project:admin 프로젝트 관리 작업 수행
project:delete 프로젝트 삭제
voice:read 보이스 구성 읽기
voice:write 보이스 구성 생성 또는 업데이트
voice:admin 보이스 관리 작업 수행
glossary:read 용어 항목 읽기
glossary:write 용어 항목 생성 또는 업데이트
glossary:admin 용어 설정 관리

권한 부여 모델

Glossia는 REST API와 MCP 서버에 대해 두 단계의 검사를 적용합니다.

  1. 범위 검사: 액세스 토큰에 필수 object:action 범위가 포함되어야 합니다.
  2. 리소스 수준 정책: 현재 사용자는 Glossia.Policy를 통해 해당 리소스에 대한 권한을 부여받아야 합니다.

범위는 토큰의 최대 역량을 나타냅니다. 정책 시스템은 특정 리소스에 대한 실제 권한을 적용합니다.

역할

역할 설명
self 자신의 리소스에 접근하는 사용자
organization_member 리소스를 소유한 조직의 구성원
organization_admin 리소스를 소유한 조직의 관리자
public_account 계정이 공개 상태임(읽기 전용)

역할 권한

범위 self organization_member organization_admin public_account
user:read
user:write
account:read
organization:read
organization:write
organization:delete
organization:admin
members:read
members:write
project:read
project:write
project:admin
project:delete
voice:read
voice:write
voice:admin
glossary:read
glossary:write
glossary:admin

검색 엔드포인트

Glossia는 클라이언트가 엔드포인트를 자동으로 찾을 수 있도록 표준 well-known URL에 메타데이터를 게시합니다.

OAuth 권한 부여 서버 메타데이터(RFC 8414)

GET /.well-known/oauth-authorization-server

발급자, 엔드포인트, 지원 범위, 권한 부여 유형 및 코드 챌린지 방식을 반환합니다.

보호된 리소스 메타데이터(RFC 9728)

GET /.well-known/oauth-protected-resource

리소스 식별자, 권한 부여 서버, 지원 범위 및 베어러 방식을 반환합니다.

요청 속도 제한

OAuth 엔드포인트에는 IP 주소별 요청 속도 제한이 적용됩니다.

엔드포인트 제한
POST /oauth/register 분당 요청 5회
POST /oauth/token 분당 요청 30회
POST /oauth/revoke 분당 요청 30회
POST /oauth/introspect 분당 요청 30회

요청 속도가 제한되면 서버는 HTTP 429(요청이 너무 많음)를 반환합니다.