跳转到主要内容

Anaconda.cloud API客户端认证库

项目描述

anaconda-cloud-auth

用于认证和存储API密钥的Anaconda.cloud API客户端库。此库由其他Anaconda.cloud客户端包使用,以提供生态系统中的集中式认证功能。在利用其他客户端包之前,您需要使用此软件包登录Anaconda.cloud。

此软件包提供了一个requests客户端类,用于处理对Anaconda Cloud服务的请求中加载API密钥。

此软件包提供了一个名为anaconda_cloudPanel 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

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

anaconda_cloud_auth-0.6.0.tar.gz (34.9 kB 查看哈希)

上传时间

构建分发

anaconda_cloud_auth-0.6.0-py3-none-any.whl (24.9 kB 查看哈希)

上传时间 Python 3

支持