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 그룹 을 통해 피드백과 제안을 제공해 주시기 바랍니다.