@ equinor/ 组合框架- 模块- azure- 标识
Azure身份认证模块用于Fusion框架.
提供三种认证模式——环境证书、交互式浏览器登录和静态符牌——所有都登记在 'auth' 模块插槽作为滴入替换 @equinor/fusion-framework-module-msal-node。 。 。 .
何时使用
| 假设 | 模式 |
|---|---|
CI/CD 与 OIDC (GitHub 动作) azure/login(阿苏雷管道) | default_credential |
| 管理身份(Azure VMS、App Service、集装箱Apps) | default_credential |
Azure CLI 登录(az login自动流动 | default_credential |
| 需要用户通过浏览器登录的 CLI 工具 | interactive |
预取的脚本 FUSION_TOKEN | token_only |
本单元和 @equinor/fusion-framework-module-msal-node 登记 'auth' 插槽,所以每次只能有一个活动.
安装
pnpm add @equinor/fusion-framework-module-azure-identity
快开始
默认证书( CI/ CD, 有管理的身份)
不需要配置——证书由环境自动解决.
import { enableAzureIdentityAuth } from '@equinor/fusion-framework-module-azure-identity';
enableAzureIdentityAuth(configurator);
交互式浏览器登录
为 Azure AD 登录打开用户的默认浏览器. 脚指和脚指 AuthenticationRecord 被缓存到 OS 键链中,所以以后的引用会默默解决.
import { enableAzureIdentityInteractive } from '@equinor/fusion-framework-module-azure-identity';
enableAzureIdentityInteractive(configurator, {
tenantId: '3aa4a235-...',
clientId: 'a318b8e1-...',
redirectPort: 49741,
onOpen: (url) => console.log(`Open: ${url}`),
});
静态符号
使用预获取的访问符 。 不支持登录和关闭 .
import { enableAzureIdentityTokenOnly } from '@equinor/fusion-framework-module-azure-identity';
enableAzureIdentityTokenOnly(configurator, process.env.FUSION_TOKEN!);
获取令牌
初始化后,获得与MSAL模块相同的符号:
const token = await framework.auth.acquireAccessToken({
request: { scopes: ['api://my-api/.default'] },
});
认证模式
default_credential 环境环境
用途 DefaultAzureCredential 尝试这些源的顺序:
- 环境变量 (单位:千美元)
AZURE_CLIENT_ID, (中文(简体) ),AZURE_TENANT_ID, (中文(简体) ),AZURE_FEDERATED_TOKEN_FILE页:1 - 工作量身份 (Kubernetes 舱与Azure 工作负荷身份)
- 管理身份 (Azure VMS, App Services, Container Apps) (英语)
- 阿苏尔CLI (单位:千美元)
az login届会) - Azure 动力壳 (单位:千美元)
Connect-AzAccount届会) - Azure 开发者 CLI (单位:千美元)
azd auth login届会)
在 GitHub 动作后 azure/login@v3 与 OIDC 连接,可自动使用选项1.
login() 财务报告和审定财务报表 logout() 抛出——没有交互式会话可管理.
interactive ——基于浏览器的登录
用途 InteractiveBrowserCredential 授权代码通过本地主机重定向流出。 为CLI工具所设计(ffc auth login, (中文(简体) ), ffc auth token) (中文(简体) ).
- 首先打开 Azure AD 登录的浏览器
- 保存
AuthenticationRecord通过 OS 级安全存储@azure/msal-node-extensions(MacOS上的钥匙链,Windows上的DPAPI,Linux上的libsecret) - 之后运行时, 将记录装入并默默从缓存证书中获取符号
// Explicit login (opens browser)
const record = await framework.auth.login({
request: { scopes: ['api://my-api/.default'] },
});
console.log('Logged in as', record.username);
// Silent token acquisition (no browser)
const token = await framework.auth.acquireAccessToken({
request: { scopes: ['api://my-api/.default'] },
});
// Clear cached credentials
await framework.auth.logout();
token_only ——静态访问符
返回一个预定义的符号字符串. login() 财务报告和审定财务报表 logout() 掷出.
操作遥测
当一个遥测模块与该模块一起注册时,提供者记录
acquireToken (哪个) acquireAccessToken 使用), login 财务报告和审定财务报表 logout 作为 fusion.azure-identity.acquire-token.duration, (中文(简体) ), fusion.azure-identity.login.duration
财务报告和审定财务报表 fusion.azure-identity.logout.duration用一个消毒 .failure 失败者除外.
磁盘、范围、账户、设备代码和原始错误从未记录,结果
错误不变。 静态 token_only 供应商从未安装过仪器,要求远程测量出口
请求,标记为 markTelemetryExportRequest,不记录。 无
遥测提供者未受影响;无论哪种方式,包都保持节点相容.
测试
token_only 模式已经避免了真实的 Azure AD 流量,但它是刚性:一个单
固定的代号,没有过期模拟,以及 login编号 :logout 总是扔。 测试
需要使用
MockAuthProvider 从 /mock 子路径 :
import { enableAuthMock } from '@equinor/fusion-framework-module-azure-identity/mock';
// seed the identity/state up front; omit the callback for a default, already-signed-in identity
const auth = enableAuthMock(configurator, (auth) => {
auth.setAccount({ username: '[email protected]', signedOut: true });
});
// drive login/logout and inspect the resulting tokens directly
await auth.login({ request: { scopes: ['User.Read'] } });
const token = await auth.acquireAccessToken({ request: { scopes: ['User.Read'] } });
// simulate an expired token, to exercise a consuming application's refresh path
auth.setExpiresOn(new Date(Date.now() - 1000));
MockAuthProvider 登记簿和任何其他的一样 IAuthProvider 执行
——无特案接线——并实现无实 @azure/identity 网络呼叫.
切换缓存持续
模块登记册 cachePersistencePlugin 从 @azure/identity-cache-persistence 在加载时间时,启用加密的 OS 级令牌缓存 :
| 平台 | 后端 |
|---|---|
| 马科斯 | 键盘链 |
| 窗口 | 政治部 |
| 链接 | 自由机密 |
单位 interactive 模式,则 AuthenticationRecord (账号元数据显示缓存的要向上查找的符号的证书)通过 @azure/msal-node-extensions 坚持不懈.
配置 API
一般情况 enableAzureIdentityAuth 为完全控制接受回调:
enableAzureIdentityAuth(configurator, (builder) => {
// Option A — mode-specific setter
builder.setInteractive({ tenantId, clientId, redirectPort: 49741 });
// Option B — full config object (discriminated union)
builder.setConfig({
mode: 'interactive',
tenantId,
clientId,
redirectPort: 49741,
});
// Option C — default credential (no args)
builder.setDefaultCredential();
// Option D — static token
builder.setTokenOnly(token);
});
出口
| 导出 | 说明 |
|---|---|
enableAzureIdentityAuth | 配置器调用通用辅助器 |
enableAzureIdentityDefaultCredential | 用于 default_credential 模式 |
enableAzureIdentityInteractive | 用于 interactive 模式 |
enableAzureIdentityTokenOnly | 用于 token_only 模式 |
AzureIdentityAuthConfigurator | 配置类型安全设置器 |
AzureIdentityAuthConfig | 歧视的工会类型 |
InteractiveAuthOptions | 交互式模式选项 |
AuthProviderDefaultCredential | 环境证书提供者类别 |
AuthProviderInteractiveBrowser | 浏览器登录的提供者类 |
AuthProviderTokenOnly | 静态符号的提供者类别 |
IAuthProvider | Auth 提供者接口 |
AzureIdentityModule | 通用参数模块类型 |
azureIdentityModule | 原始模块定义 |
/mock 子路径
| 导出 | 说明 |
|---|---|
MockAuthProvider | 可配置 IAuthProvider 测试双- login编号 :logout 工作、标志和过期时间可确定 |
MockAuthProviderOptions | 用于 MockAuthProvider |
enableAuthMock | 登记a MockAuthProvider 作为 'auth' 模块并返回 |
createAuthMockModule | 构建给定的模拟模块描述符 MockAuthProvider |