Skip to main content
On this page

OIDC

Deno DeployEA 是一个 OIDC 提供者。Deno DeployEA 的每个正在运行的应用程序都可以获得由 Deno DeployEA 签发的短期 JWT 令牌。这些令牌包含有关应用程序的信息,例如组织和应用的 ID 与 slug、应用程序执行的上下文以及正在运行的修订版本 ID。

这些令牌可以用来与支持 OIDC 认证的第三方服务进行身份验证,例如主要的云提供商,也包括 HashiCorp Vault、NPM 等。

Tip

想要使用 OIDC 令牌进行 AWS 或 Google Cloud 的身份验证?请使用云连接功能,而不是手动配置 OIDC 认证。云连接会为您处理整个配置流程,包括建立信任关系和权限设置。底层依然使用的是 OIDC。

签发令牌 Jump to heading

要为当前正在运行的应用程序签发令牌,请使用来自 @deno/oidc 模块(在 JSR 上)getIdToken() 函数。

首先,将 @deno/oidc 作为您的应用依赖安装:

deno add jsr:@deno/oidc

然后,引入 getIdToken() 函数,并使用所需的目标受众调用它:

import { getIdToken } from "jsr:@deno/oidc";

const token = await getIdToken("https://example.com/");
console.log(token);

audience 参数是一个字符串,用于标识令牌的预期接收方。通常是一个 URL 或表示将消费该令牌的服务或应用的标识符。受众值必须与您希望进行身份验证的第三方服务中配置的值相匹配。该值会放入签发的 JWT 令牌的 aud 声明中。

getIdToken() 函数返回一个 Promise,解析后为字符串形式的 JWT 令牌。

若要检查当前环境是否支持 OIDC(即您的应用是否运行在 Deno DeployEA 上),可使用 supportsIssuingIdTokens 命名空间属性:

import { supportsIssuingIdTokens } from "jsr:@deno/oidc";

if (supportsIssuingIdTokens) {
  // 支持 OIDC
} else {
  // 不支持 OIDC
}

令牌结构 Jump to heading

发放的令牌是采用 RS256 算法签名的 JWT 令牌。令牌包含以下声明:

声明名称 示例值 描述
iss https://oidc.deno.com 令牌的签发者,总是 https://oidc.deno.com
aud https://example.com/ 令牌的受众,即传入 getIdToken() 函数的值。
iat 1757924011 令牌签发时间,Unix 时间戳,表示令牌签发时刻。
exp 1757924311 令牌过期时间,Unix 时间戳,表示令牌失效时刻。
nbf 1757923951 令牌生效时间,Unix 时间戳,表示令牌开始有效时刻。
sub deployment:deno/astro-app/production 令牌主题,是字符串拼接的形式:deployment:<org>/<app>/<context>
org_id 729adb8f-20d6-4b09-bb14-fac14cb260d1 拥有该应用的组织的唯一标识符。
org_slug deno 拥有该应用的组织的 slug。
app_id 16ad21d8-7aeb-4155-8aa3-9f58df87cd3e 应用的唯一标识符。
app_slug astro-app 应用的 slug。
context_id 1d685676-92d7-418d-b103-75b46f1a58b4 应用运行的上下文的唯一标识符。
context_name production 应用运行的上下文。
revision_id rh2r15rgy802 当前运行的应用修订版本的唯一标识符。
deployment_id <随机字符串> 包含整个部署元数据(包括应用、修订和上下文 ID)的唯一哈希。

令牌会在签发后 5 分钟过期。为考虑时钟偏差,令牌中的 nbf 声明设置为比 iat 提前 1 分钟。

验证令牌 Jump to heading

要验证由 Deno DeployEA 签发的令牌,您需要从 OIDC 提供者的 JWKS 端点获取公钥。Deno DeployEA 的 JWKS 端点为:

https://oidc.deno.com/.well-known/jwks.json

使用 JWT 令牌头中的 kid(密钥 ID)选择 JWKS 响应中的正确密钥。

Deno DeployEA 还提供了标准的 OIDC 发现文档:

https://oidc.deno.com/.well-known/openid-configuration

Deno DeployEA 会定期更换其签名密钥,因此应动态从 JWKS 端点获取密钥,而不要将密钥硬编码。

当前,Deno DeployEA 的签名密钥使用 ES256 算法。未来可能会根据安全需求、最佳实践及第三方服务支持情况进行更改。

验证令牌时,可以使用支持 OIDC 和 JWKS 的 JWT 库。在 TypeScript 中,您可以使用 jose 库。

你找到了你需要的东西吗?

编辑此页面
隐私政策