身份验证
Altium Identity 是 Altium 的 OAuth 2.0 和 OpenID Connect (OIDC) 身份提供程序。您的应用程序通过 Altium Identity 对用户进行身份验证,然后代表用户调用 Altium 365 API,全程无需处理用户的 Altium 密码。
应用程序使用 authorization-code flow 和 PKCE 登录。公共客户端(桌面、本地部署、原生、单页应用)使用 PKCE,无需客户端密钥;机密客户端(Web/服务器后端)则需添加客户端密钥。包含每个请求和响应的分步流程均托管在 GitHub 上,本页面将解释相关概念,帮助您选择合适的路径。
令牌术语
商业版 Altium 365 服务覆盖四个地理区域:
术语 |
含义 |
Global access token |
使用 |
Workspace access token |
通过 |
| Refresh token | 请求 |
有关令牌及其声明的完整结构,请参阅 令牌 和 OAuth 作用域。
登录过程
Web 应用与桌面/本地部署应用的登录过程相同,唯一区别在于获取授权码的 how方式 (使用应用托管的重定向端点,或者对于无法托管此类端点的应用,使用 Altium 托管的 ActionWait 模式)。无论哪种情况:
-
Sign in on Commercial Cloud (
https://auth.altium.com) 以获取 global access token。使用它可访问全局资源,例如列出用户的工作区。 -
Discover the user's workspaces ,使用全局令牌。
-
Exchange the global token for a workspace access token,在与工作区匹配的端点(商业云或 GovCloud,见下文)执行。
-
Call the Altium 365 API ,使用工作区令牌,并在签发该令牌的端点刷新它。
sequenceDiagram
participant App
participant Identity as Altium Identity
participant API as Altium 365 API
App->>Identity: 1. Sign in on auth.altium.com (openid profile) + PKCE
Identity-->>App: global access token
App->>API: 2. Discover workspaces (global token)
API-->>App: workspaces (+ location)
App->>Identity: 3. Exchange for a workspace token
Identity-->>App: workspace access token (+ refresh token)
App->>API: 4. API calls (workspace access token)
应用通常会同时持有多个令牌:一个全局令牌,以及每个正在使用的工作区各自的工作区令牌。每个令牌均在各自的签发端点刷新。
商业云与 GovCloud
Altium 365 运行两个严格隔离的环境:
-
Commercial Cloud (
auth.altium.com) — 默认环境。 -
GovCloud (
auth.365-gov.altium.com) — 用于 ITAR/受监管工作区的隔离环境。
令牌的签发者 (iss) 标识了签发该令牌的环境,两个环境的令牌绝不能互换使用:商业服务会拒绝 Gov 令牌,GovCloud 也会拒绝商业令牌。GovCloud 通过 two-token model 强制实施这一限制:Gov 工作区令牌带有一个 secure 标记,将其绑定到 GovCloud。您只需在商业云上登录一次,然后在各工作区所属的环境中,将全局令牌交换为相应的工作区令牌。
我需要哪种流程?
您的应用程序 |
流程 |
指南 |
| Web or server 能够托管 HTTPS 重定向端点的应用 | 授权码重定向流程 |
Web 和服务器应用 |
Desktop, on-prem, or native 无法托管重定向端点的应用 |
通过 Altium 托管的 ActionWait 模式在浏览器中登录 |
桌面和本地部署应用 |
客户端库
您无需手动实现该流程。Altium 维护着多个开源库,它们均基于同一套语言无关规范构建,并通过共享的一致性测试套件进行验证:
语言 |
参考文档 |
| TypeScript | TypeScript 库 |
| .NET | .NET 库 |
| Python | Python 库 |