【问题标题】:How can I call B2C Graph API from angular?如何从角度调用 B2C Graph API?
【发布时间】:2020-06-08 14:30:48
【问题描述】:

我正在尝试了解如何调用图形 API 以使用 msal-angular ("@azure/msal-angular": "^0.1.4") 拉回一些用户信息。 我还没有找到一个可行的例子/教程。

我已经设置了 Azure AD B2C。使用用户名作为登录密钥创建了一个本地帐户提供程序。 我创建了注册/登录流程并注册了一个 webapp 'b2c-app01'。对于 API 权限,我为应用授予了“user.read”权限。

我已使用以下 msal 配置登录

    MsalModule.forRoot({
      clientID: "00000000-0000-0000-0000-000000000000", // b2c-app01 in app registration
      authority: "https://b2c-app01.b2clogin.com/tfp/b2c-app01.onmicrosoft.com/B2C_1_SignInOrSignUp",
      validateAuthority: false,

接下来,我将尝试按照此示例 https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-javascript-spa 访问图形 API。

但是,我无法通过 acquireTokenSilent 调用。我将 ['user.read'] 传递给范围,并得到以下错误

        this._user = this.authService.getUser();
        let tokenResponse = await this.authService.acquireTokenSilent(
            ['user.read'],
        );
        console.log(tokenResponse);

The scope 'user.read' provided in the request is not supported.

我尝试将用户中返回的身份提供者 url 用于权限属性,但随后出现 CORS 错误。我什至不知道这是否有效,所以我没有进一步研究 CORS 错误

        this._user = this.authService.getUser();
        let tokenResponse = await this.authService.acquireTokenSilent(
            ['user.read'],
            this._user.identityProvider,
            this._user,
        );
        console.log(tokenResponse);

blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

关于我做错了什么或我缺少什么的任何建议?

编辑:

下面是api权限

【问题讨论】:

    标签: angular azure-ad-b2c msal.js


    【解决方案1】:

    您是否尝试过在 User.Read 范围前加上图形 URL,即 https://graph.microsoft.com/User.Read?只是在黑暗中刺伤......

    本文介绍了使用 B2C 应用调用 Microsoft Graph 的场景:

    https://docs.microsoft.com/en-us/azure/active-directory-b2c/microsoft-graph-get-started?tabs=applications

    那篇文章实现的 OAUTH 场景是 client_credentials flow,也称为服务帐户或守护程序。我认为他们涵盖的主要用例是使用 Azure DevOps 来维护身份策略,并通过到 Graph 对 DevOps 部署管道进行身份验证以自动上传策略。

    理想情况下,可以支持其他用户交互的 oauth 流程,例如on-behalf-ofimplicit grant 流。

    【讨论】:

      【解决方案2】:

      AAD B2C 应用注册无法获得 Graph API 的权限。根据您所说的,您已经在 B2C 目录中创建了 AAD 应用程序注册。

      这是不可能的 “我创建了注册/登录流程并注册了一个网络应用程序‘b2c-app01’。对于 API 权限,我为应用授予了“user.read”权限。”

      您提到了 AAD B2C,但您的 JS 示例适用于 AAD。 对于 AAD B2C 用例,返回用户令牌中的所有必需数据。对于任何其他图形 API 调用,例如查询用户组,调用您自己的 API,该 API 使用客户端凭据对 B2C 租户中的 AAD App Reg 进行身份验证。

      【讨论】:

      • 我没有意识到这一点,我也没有看到文档中提到的内容(再说一遍 - 文档一直指向其他部分,我很可能只是错过了它)。请参阅随附的屏幕截图,好像我已授予应用程序图表访问权限。
      • 好的,但此应用程序将无法作为 B2C 策略(用户流/自定义策略)执行的一部分启动。它仅适用于 B2C 租户的 AAD 端点。
      • 是的 - 从那以后我读了很多书,但我误解了 AD B2C 的功能。我认为通过从登录返回的 id 令牌,我可以 - 不知何故 - 直接控制对资源的访问。但相反,正如你所说,我必须让 webapp 运行或添加功能,这就是客户端应用程序将调用的。我的理解正确吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2021-11-06
      • 2018-03-02
      • 1970-01-01
      • 2019-12-06
      • 2019-05-02
      相关资源
      最近更新 更多