Sistema OAuth2 (Experimental)#
O Xinference usa um padrão de nome de usuário e senha para construir um sistema de autenticação e autorização OAuth2 baseado em memória.
Nota
Se não houver requisitos de autenticação e autorização, você pode continuar usando o Xinference como antes, sem qualquer alteração.
Permissão#
Atualmente, o Xinference define internamente as seguintes permissões de interface:
models:list: Permissão para obter a lista de modelos e informações.models:read: Permissão para usar o modelo.models:register: Permissão para registrar modelos.models:unregister: Cancela o registro da permissão do modelo.models:start: Permissão para iniciar o modelo.models:stop: Permissão para parar o modelo.admin: O administrador possui permissão para todas as interfaces.
Comece a usar#
Ao iniciar o Xinference, é necessário especificar todas as informações de verificação e autorização. Atualmente, o Xinference requer um arquivo JSON contendo os seguintes campos específicos:
{
"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: este campo configura informações relacionadas à segurança.algorithm: Algoritmo utilizado para geração e análise de tokens. Recomenda-se o uso de algoritmos da sérieHS, comoHS256,HS384ouHS512.secret_key: Chave usada para geração e análise de tokens. Pode-se usar o comando para gerar uma chave compatível com a série de algoritmosHS:openssl rand -hex 32.token_expire_in_minutes: campo reservado que indica o tempo de expiração do token. Atualmente, a versão de código aberto do Xinference não verifica o tempo de expiração do token.
user_config: Este campo é usado para configurar informações de usuários e permissões. Cada informação de usuário é composta pelos seguintes campos:username: string, representa o nome de usuáriopassword: string, representando a senhapermissions: Lista de strings que indica as permissões do usuário. A descrição das permissões conforme documentado na seção de permissões acima.api_keys: lista de strings, representando as chaves de API que o usuário possui. Através dessas chaves de API, o usuário pode acessar a interface do xinference sem a necessidade de realizar login. A composição das chaves de API aqui é semelhante àOPENAI_API_KEY, sempre começando comsk-, seguida por 13 caracteres entre números e letras maiúsculas/minúsculas.
Após configurar um arquivo JSON como esse, você pode usar a opção --auth-config para habilitar o Xinference com um sistema de autenticação e autorização. Por exemplo, o comando para iniciar localmente é o seguinte:
xinference-local -H 0.0.0.0 --auth-config /path/to/your_json_config_file
Em um ambiente distribuído, basta especificar esta opção ao iniciar o supervisor:
xinference-supervisor -H <supervisor_ip> --auth-config /path/to/your_json_config_file
Use#
Use o serviço Xinference com gerenciamento de permissões da mesma forma que a versão normal, apenas adicionando uma etapa de login no início, ou utilizando api-key para autenticação.
Uso baseado em nome de usuário e senha#
Faça login usando a linha de comando:
xinference login -e <endpoint> --username <username> --password <password>
Use o SDK Python para fazer login:
from xinference.client import Client
client = Client('<endpoint>')
client.login('<name>', '<pass>')
Para os usuários da Web UI, ao abrir a interface, será redirecionado primeiro para a página de login. Após fazer login, é possível utilizar normalmente as funcionalidades da Web UI.
Método de uso baseado na autenticação via Api-Key.#
Para usuários de linha de comando, basta adicionar a opção --api-key ou -ak ao comando que deseja executar.
xinference launch <other options> --api-key <your_api_key>
Para usuários do cliente Python, basta passar o parâmetro api_key durante a inicialização do objeto cliente, assim como no cliente OPENAI.
from xinference.client import Client
client = Client('<endpoint>', api_key='<your_api_key>')
Claro, o Xinference também é totalmente compatível com o uso do cliente Python OPENAI.
from openai import OpenAI
client = OpenAI(base_url="<xinference endpoint>" + "/v1", api_key="<your_api_key>")
client.models.list()
Para requisições HTTP, passe Authorization: Bearer api-key no cabeçalho da requisição.
curl --request GET \
--url "<xinference endpoint>" \
--header "Authorization: Bearer <your_api_key>"
Códigos de status HTTP#
Adicionados os seguintes dois códigos de status HTTP:
401 Unauthorized: As informações de login ou a validação do token expiraram.403 Forbidden: Não há permissão suficiente para acessar a interface.
Para usuários de linha de comando, SDK ou Web UI, haverá mensagens claras informando sobre problemas de autorização e permissão.
Atenção#
Esta funcionalidade está em fase experimental. Feedbacks e sugestões são bem-vindos através do GitHub issues ou do Grupo Telegram.