Anaconda.cloud API客户端认证库
项目描述
anaconda-cloud-auth
用于认证和存储API密钥的Anaconda.cloud API客户端库。此库由其他Anaconda.cloud客户端包使用,以提供生态系统中的集中式认证功能。在利用其他客户端包之前,您需要使用此软件包登录Anaconda.cloud。
此软件包提供了一个requests客户端类,用于处理对Anaconda Cloud服务的请求中加载API密钥。
此软件包提供了一个名为anaconda_cloud
的Panel OAuth插件。
安装
conda install anaconda-cloud-auth
使用方法
为了使用此软件包或其他Anaconda.cloud客户端包,您必须首先进行交互式登录。可以使用Python API或CLI完成此操作。
要使用anaconda-cloud-auth
作为CLI,您需要安装anaconda-cloud
软件包。安装后,您可以使用anaconda
CLI登录和注销Anaconda Cloud。
❯ anaconda login --help
Usage: anaconda login [OPTIONS]
Login to your Anaconda account.
╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --domain TEXT [default: None] │
│ --basic --no-basic Deprecated [default: no-basic] │
│ --force --no-force [default: no-force] │
│ --help Show this message and exit. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
API密钥和令牌
当您使用anaconda-cloud-auth
登录时,认证令牌将存储在~/.anaconda/keyring
,并在您注销时删除。认证令牌需要每年更新一次。
如果您没有交互式浏览器访问权限,有几种方法可以从具有交互式访问权限的系统生成API令牌
- 您可以将
~/.anaconda/keyring
文件复制到已成功运行anaconda login
的系统 - 您可以使用 anaconda-cloud-curl 生成原始 API 令牌。
anaconda curl --use-browser-token -X POST -d '{"scopes": ["cloud:read", "cloud:write"]}' api/iam/api-keys
这会将 API 密钥写入终端(下面的密钥是假的)。
{
"api_key": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVC.eyJleHAiOjE3NDQxMjMwOTYsImtpZCI6IjUxNzE2MCIsInNjb3BlcyI6WyJjbG91ZDpyZWFkIiwiY2xvdWQ6d3JpdGUiXSwic3ViIjoiN2E5MWM0ZWYtYWJhNy00OGUxLTk0NDYtMTk0ZDhkYzZjODNkIiwidmVyIjoiYXBpOjEifQ.T1iMbWnWG7CU3oJJczhM8qjGuyja0udZdxLjmb-DY6_f3GmG-bnxb9yBSszUrAYebFibhxs4-b2EYZcDnjNGbhitFVVOv6E6TKW4WrLTaDTa74jDeU56Z4-YvA_mrmtgIN6dFKNvN8B75HzRpy2mQKbiwrpPk-Ev1KlNgob8O_Y7UqR25zBNDoaepW44EMKPYDYL3zgttX3WbKyWFBlUVnKBl89Evvm4QUbJLgp4fVy0CON4wKOy3nSOZRK7MZqmtsTuBsvG0nCV6pVAL0DxATZCNKdfsxS-eajvUFj2gDaIK_RDoDwp7NIL7Hg6PcIJPVJ3sk2oSDfAOhfgHqKeHQ",
"expires_at": "2025-04-08T14:38:16.33000217Z",
"id": "417160"
}
保存 "api_key"
的值,并在非交互式系统中将其设置为 ANACONDA_CLOUD_API_KEY
环境变量。
配置
您可以通过设置一个或多个 ANACONDA_CLOUD_
环境变量或使用 .env
文件来配置 anaconda-cloud-auth
。该 .env
文件必须位于您的当前工作目录中。仓库中提供了一个示例模板,其中包含以下选项,它们是默认值。
# Logging level
LOGGING_LEVEL="INFO"
# Base URL for all API endpoints
ANACONDA_CLOUD_API_DOMAIN="anaconda.cloud"
# Authentication settings
ANACONDA_CLOUD_AUTH_DOMAIN="id.anaconda.cloud"
ANACONDA_CLOUD_AUTH_CLIENT_ID="b4ad7f1d-c784-46b5-a9fe-106e50441f5a"
除了上述变量之外,您还可以设置以下内容
# API key to use for all requests, this will ignore the keyring token set by `anaconda login`
ANACONDA_CLOUD_API_KEY="<api-key>"
# Extra headers to use in all requests; must be parsable JSON format
ANACONDA_CLOUD_API_EXTRA_HEADERS='<json-parsable-dictionary>'
Python API
from anaconda_cloud_auth import login
login()
login()
函数启动基于浏览器的登录流程。它将自动打开您的浏览器,一旦您完成登录流程,它将在您的系统中存储一个 API 密钥。
通常,这些 API 密钥的有效期为一 year,因此您只需要登录一次,使用客户端类进行请求时,将从密钥存储中读取令牌。
如果您在有效(非过期)的 API 密钥存在时调用 login()
,则不会采取任何操作。您可以使用 login(force=True)
替换有效的 API 密钥。
要从未加密存储中删除 API 密钥,请使用 logout()
函数。
from anaconda_cloud_auth import logout
logout()
基于密码的流程(已弃用)
警告:基于密码的登录流程将在不久的将来被禁用。
您可以使用带有 basic=True
关键字参数的 basic=True
流(非浏览器)登录 Anaconda Cloud。在完成登录并存储 API 密钥之前,login()
函数将交互式地请求您的用户名和密码。
from anaconda_cloud_auth import login
login(basic=True)
API 请求
BaseClient 类是 requests.Session 的子类。它将在每次请求时自动从密钥存储中加载 API 密钥。如果 API 密钥已过期,它将引发 TokenExpiredError
。
如果找不到 API 密钥并且请求返回 401 或 403 错误代码,则 Client 类可用于非认证请求,将引发 LoginRequiredError
。
from anaconda_cloud_auth.client import BaseClient
client = BaseClient()
response = client.get("/api/<endpoint>")
print(response.json())
BaseClient 接受以下可选参数。
domain
:用于请求的域名,默认为anaconda.cloud
api_key
:用于请求的 API 密钥,如果未指定,则使用anaconda login
设置的令牌user_agent
:默认为anaconda-cloud-auth/<package-version>
api_version
:请求的 API 版本,默认为域中提供的最新版本extra_headers
:要发送请求的额外头部的字典或 JSON 字符串
要创建特定于您包的 Client 类,请从 BaseClient 继承,并根据您的需求设置适当的用户代理和 API 版本。如果您使用本仓库中的 cookiecutter 创建新包,这将自动完成。
from anaconda_cloud_auth.client import BaseClient
class Client(BaseClient):
_user_agent = "anaconda-cloud-<package>/<version>"
_api_version = "<api-version>"
Panel OAuth 提供商
为了使用 anaconda_cloud 身份验证插件,您需要 OAuth 客户端 ID(密钥)和秘密。客户端必须按如下方式配置
Set scopes: offline_access, openid, email, profile
Set redirect url to http://localhost:5006
Set grant type: Authorization Code
Set response types: ID Token, Token, Code
Set access token type: JWT
Set Authentication Method: HTTP Body
要使用 anaconda_cloud 身份验证提供程序运行应用程序,您需要设置几个环境变量或命令行参数。有关更多详细信息,请参阅 Panel OAuth 文档
PANEL_OAUTH_PROVIDER=anaconda_cloud or --oauth-provider anaconda_cloud
PANEL_OAUTH_KEY=<key> or --oauth-key=<key>
PANEL_OAUTH_SECRET=<secret> or --oauth-secret=<key>
PANEL_COOKIE_SECRET=<cookie-name> or --cookie-secret=<value>
PANEL_OAUTH_REFRESH_TOKENS=1 or --oauth-refresh-tokens
PANEL_OAUTH_OPTIONAL=1 or --oauth-optional
panel serve <arguments> ...
如果您未指定 .env
文件,则生产配置应为默认值。如果您看到任何错误,请提交问题。
开发设置
确保您已安装 conda
。然后运行
make setup
运行单元测试
make test
使用 tox 在隔离环境中运行单元测试
make tox
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。