【问题标题】:How to configure a WebApp & WebApi with different AAD App IDs?如何配置具有不同 AAD 应用 ID 的 WebApp 和 WebApi?
【发布时间】:2018-07-26 20:52:40
【问题描述】:

我目前有两个应用服务

  1. Web 应用程序(Asp.net core 2 w/react 前端)
  2. Web Api (Asp.net core 2)

注意:两者都配置了不同的 Azure Active Directory 应用程序 ID。

  1. 用户登录 Web 应用程序并为其自己的 appId/ClientId/ClientSecret 检索令牌,该令牌存储在令牌缓存中。
  2. 从 WebApp,用户想要与 WebAPI 对话,但需要获取令牌,因为它也受 AAD 保护,但它是不同的应用 ID/客户端 ID/客户端密码。

问题: 当我尝试为 web api 执行 AcquireTokenSilentAsync() 时,我收到一个错误,提示我令牌不在缓存中?

似乎还取决于您使用 AAD v2.0 还是 v1.0 将确定 Web 应用程序和 Web api 是否可以具有不同的应用程序 ID。所以看来我必须使用 AAD v1.0。对于 Asp.net core 2,我不清楚 OpenIdConnect 在幕后使用或配置为使用什么。

问题:

  1. 我不清楚为什么获取令牌静默异步不起作用并且失败。是否只在缓存中查找令牌?否则会失败?
  2. 是否可以从 Web 应用程序配置令牌以获得访问 Web api 资源的权限。我注意到在 azure 门户中,您可以选择 microsoft graph 等资源,但我不知道您将如何关联自定义 API。就我而言,我希望在将其全部迁移到 azure 之前让它在我的本地计算机上运行。
  3. 如果 Web 应用程序令牌没有访问 Web api 的权限,我是否需要对用户进行另一次登录身份验证,即使你们都在同一个租户内?

任何建议表示赞赏, 德里克

【问题讨论】:

    标签: azure-active-directory asp.net-core-2.0 openid-connect


    【解决方案1】:
    1. 是的,AcquireTokenSilentAsync 将查看缓存,看看它是否可以找到令牌。如果是,它将检查访问令牌是否仍然有效并将其返回。如果令牌过期,它将使用刷新令牌获取新的访问令牌并将其返回。当此调用失败时,表明您需要执行 AcquireTokenAsync(在静默已经失败的情况下可能会显示 UI)。

    2. 是的,您可以关联一个 Web 应用程序以获取您自己的自定义 Web API 的令牌。我建议使用 Azure AD v1.0(在 Azure portal,ADAL 库中注册应用程序)。您需要注册两个应用程序(Web 应用程序和 api),两者都将输入 web app/api。在 API 中,您可以注册一个 App ID URI,它将充当此 API 的资源标识符。在您的 Web 应用程序中,您需要进入 Required Permissions,并添加您已注册为权限的 Web API。然后在您的 Web 应用程序中,您需要使用 ADAL 库(以及 OpenID OWIN 中间件)来获取由 App ID URI 字段指定的资源的令牌。 Here's 一个代码示例,它实现了您所描述的确切场景(ASP.NET Core 中的 Web 应用/API)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多