OAuth2 시스템(실험적)#

Xinference는 계정과 비밀번호 방식을 사용하여 메모리 기반 OAuth2 인증 및 권한 부여 시스템을 구축합니다.

참고

인증 및 권한 부여 요구 사항이 없다면 이전과 같이 Xinference를 변경 없이 사용할 수 있습니다.

권한#

현재, Xinference 내부에서는 다음과 같은 인터페이스 권한이 정의되어 있습니다:

  • models:list: 모델 목록 및 정보를 가져오는 권한.

  • models:read: 모델을 읽을 수 있는 권한.

  • models:register: 모델 등록 권한.

  • models:unregister: 모델 등록을 취소할 권한.

  • models:start: 모델을 시작할 수 있는 권한입니다.

  • models:stop: 모델을 중지할 권한입니다.

  • admin: 관리자는 모든 인터페이스에 대한 권한을 가집니다.

시작하기#

Xinference를 시작할 때는 모든 인증 및 권한 정보를 지정해야 합니다. 현재 Xinference는 다음 특정 필드를 포함하는 JSON 파일이 필요합니다:

{
    "auth_config": {
        "algorithm": "HS256",
        "secret_key": "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7",
        "token_expire_in_minutes": 30
    },
    "user_config": [
        {
            "username": "user1",
            "password": "secret1",
            "permissions": [
                "admin"
            ],
            "api_keys": [
                "sk-72tkvudyGLPMi",
                "sk-ZOTLIY4gt9w11"
            ]
        },
        {
            "username": "user2",
            "password": "secret2",
            "permissions": [
                "models:list",
                "models:read"
            ],
            "api_keys": [
                "sk-35tkasdyGLYMy",
                "sk-ALTbgl6ut981w"
            ]
        }
    ]
}
  • auth_config: 이 필드는 보안 관련 정보를 구성합니다.

    • algorithm: 토큰 생성 및 파싱에 사용되는 알고리즘입니다. HS 계열 알고리즘(예: HS256, HS384 또는 HS512)을 사용하는 것을 권장합니다.

    • secret_key: 토큰 생성 및 분석에 사용되는 키입니다. 다음 명령을 사용하여 HS 시리즈 알고리즘에 적합한 키를 생성할 수 있습니다: openssl rand -hex 32.

    • token_expire_in_minutes: 예약 필드로, 토큰 만료 시간을 나타냅니다. 현재 Xinference 오픈 소스 버전에서는 토큰 만료 시간을 확인하지 않습니다.

  • user_config: 이 필드는 사용자와 권한 정보를 구성하는 데 사용됩니다. 각 사용자 정보는 다음 필드로 구성됩니다:

    • username: 문자열, 사용자 이름을 나타냄

    • password: 문자열, 비밀번호를 나타냄

    • permissions: 문자열 리스트로, 해당 사용자가 소유한 권한을 나타냅니다. 권한 설명은 위의 권한 부분 문서에 기술된 바와 같습니다.

    • api_keys: 문자열 리스트로, 해당 사용자가 소유한 api-key를 나타냅니다. 사용자는 이러한 api-key를 통해 로그인 절차 없이 xinference 인터페이스에 접근할 수 있습니다. 여기서 api_key의 구성은 `OPENAI_API_KEY`와 유사하며, 항상 `sk-`로 시작하고 그 뒤에 13개의 숫자, 대소문자 알파벳이 옵니다.

이러한 JSON 파일을 설정한 후 --auth-config 옵션을 사용하여 인증 및 권한 부여 시스템이 있는 Xinference를 활성화할 수 있습니다. 예를 들어, 로컬에서 시작하는 명령은 다음과 같습니다:

xinference-local -H 0.0.0.0 --auth-config /path/to/your_json_config_file

분산 환경에서는 supervisor를 시작할 때 이 옵션만 지정하면 됩니다:

xinference-supervisor -H <supervisor_ip> --auth-config /path/to/your_json_config_file

사용#

권한 관리가 포함된 Xinference 서비스는 일반 버전과 동일하며, 시작 단계에서 로그인 절차 또는 api-key를 사용한 인증만 추가되었습니다.

사용자 이름-비밀번호 기반 방식#

명령줄을 사용하여 로그인:

xinference login -e <endpoint> --username <username> --password <password>

Python SDK를 사용하여 로그인:

from xinference.client import Client
client = Client('<endpoint>')
client.login('<name>', '<pass>')

웹 UI 사용자의 경우, 웹 UI를 열면 먼저 로그인 페이지로 이동합니다. 로그인한 후에는 웹 UI의 기능을 정상적으로 사용할 수 있습니다.

Api-Key 인증을 사용하는 방식#

명령줄 사용자의 경우, 실행하려는 명령에 --api-key 또는 -ak 옵션만 추가하면 됩니다.

xinference launch <other options> --api-key <your_api_key>

Python 클라이언트 사용자의 경우, 클라이언트 객체 초기화 시 api_key 매개변수를 전달하면 됩니다. 이는 OPENAI 클라이언트와 동일합니다.

from xinference.client import Client
client = Client('<endpoint>', api_key='<your_api_key>')

물론, Xinference는 OPENAI Python 클라이언트 사용 방식과도 완전히 호환됩니다.

from openai import OpenAI
client = OpenAI(base_url="<xinference endpoint>" + "/v1", api_key="<your_api_key>")
client.models.list()

HTTP 요청의 경우, 요청 헤더에 ``Authorization: Bearer api-key``를 전달하십시오.

curl --request GET \
  --url "<xinference endpoint>" \
  --header "Authorization: Bearer <your_api_key>"

HTTP 상태 코드#

다음 두 가지 HTTP 상태 코드가 추가되었습니다:

  • 401 Unauthorized: 로그인 정보 또는 토큰 인증이 실패했습니다.

  • 403 Forbidden: 인터페이스에 접근할 수 있는 충분한 권한이 없습니다.

명령줄, SDK 또는 웹 UI 사용자의 경우 인증 및 권한 문제가 발생할 때 명확한 정보提示가 표시됩니다.

주의#

이 기능은 실험 단계에 있습니다. GitHub issues 또는 Telegram 그룹 을 통해 피드백과 제안을 제공해 주시기 바랍니다.