身份验证 JavaScript API

Fabric 前端为 Fabric 工作负载提供 Javascript API,以便在 Microsoft Entra ID 中获取其应用程序的令牌。 本文介绍了此 API。

API

acquireAccessToken(params: AcquireAccessTokenParams): Promise<AccessToken>;  
export interface AcquireAccessTokenParams {
    additionalScopesToConsent?: string[];  
    claimsForConditionalAccessPolicy?: string;
    promptFullConsent?: boolean;
}

API 返回一个 AccessToken 对象,其中包含令牌本身和令牌的到期日期。

若要在前端示例中调用 API,请创建一个示例项,然后向下滚动并选择“导航到身份验证页”。 在此处可以选择“获取访问令牌”,并将收到返回一个令牌。

显示身份验证部分的屏幕截图。

同意

若要了解为什么需要同意,请详细了解 Microsoft Entra ID 中的用户和管理员同意

注意

CRUD/作业需要同意才能工作和跨租户获取令牌。

同意在 Fabric 工作负载中如何发生作用?

若要授予特定应用程序的同意,Fabric FE 会创建配置有工作负载应用程序 ID 的 MSAL 实例,并请求所提供范围的令牌(additionalScopesToConsent - 请参阅 AcquireAccessTokenParams)。

当为特定范围请求工作负载应用程序的令牌时,Microsoft Entra ID 会弹出同意窗口以防令牌丢失,然后将弹出窗口重定向到应用程序中配置的重定向 URI

重定向 URI 通常与请求令牌的页面位于同一域中,因此页面可以访问弹出窗口并将其关闭。

在本例中,它不在同一域中,因为 Fabric 正在请求令牌,工作负载的重定向 URI 不在 Fabric 域中。 因此,当同意对话框打开时,需要在重定向后手动将其关闭。 我们不使用 redirectUri 中返回的代码,因此我们只是自动将其关闭(当 Microsoft Entra ID 将弹出窗口重定向到重定向 URL 时,它会直接关闭)。

可以在 index.ts 文件中查看重定向 URI 的代码/配置。

下面是应用“我的工作负载应用”及其依赖项(存储和 Power BI)的同意弹出窗口示例,我们在执行身份验证设置时配置了该弹出窗口:

所需权限对话框的屏幕截图。

在家庭租户中授予同意的另一种方法(可选)

若要在应用程序的主租户中获取同意,可以要求租户管理员使用以下格式的 URL 向整个租户授予同意(插入自己的租户 ID 和客户端 ID):

https://login.microsoftonline.com/{tenantId}/adminconsent?client_id={clientId}

AcquireAccessTokenParams

在调用 acquireAccessToken JS API 时,我们可以提供三个参数:

  • additionalScopesToConsent:请求同意的其他范围,例如重新同意应用场景。
  • claimsForConditionalAccessPolicy:当 OBO 流失败时从 Microsoft Entra ID 返回的声明,例如 OBO 需要多重身份验证。
  • promptFullConsent:提示用户完成工作负荷应用程序的静态依赖项的完整同意窗口。

additionalScopesToConsent

如果工作负荷前端要求使用令牌来调用工作负荷后端,则此参数应该为 null。 由于“缺少同意”错误,工作负荷后端可能无法对收到的令牌执行 OBO,在这种情况下,工作负荷后端需要将错误传播到工作负荷前端并提供此参数。

claimsForConditionalAccessPolicy

在工作负载 BE 中由于租户上配置了一些条件访问策略而遇到 OBO 失败时,将使用此参数。

由于条件访问策略导致 OBO 失败会返回名为“claims”的字符串。此字符串应发送到工作负载 FE,其中 FE 应请求令牌,并作为 claimsForConditionalAccessPolicy 传递声明。 有关详细信息,请参阅处理多重身份验证 (MFA)、条件访问和增量同意

请参阅 BE 示例中的 AuthenticationService AddBearerClaimToResponse 用法,以查看 OBO 操作因同意缺失或条件访问策略而失败时响应的示例。

若要详细了解此 additionalScopesToConsent 和 claimsForConditionalAccessPolicy 并查看使用示例,请参阅工作负荷身份验证指南与深入探讨

promptFullConsent

将此项作为 true 传递时,无论用户之前是否提供了同意,都会弹出对静态依赖项的完全同意。 此参数的一个示例用法是:将一个按钮添加到 UX,用户可以使用它来授予对工作负荷的完全同意。