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érie HS, como HS256, HS384 ou HS512.

    • 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 algoritmos HS: 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ário

    • password: string, representando a senha

    • permissions: 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 com sk-, 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.