【问题标题】:Can client and service web applications share the same Azure Active Directory Application?客户端和服务 Web 应用程序可以共享同一个 Azure Active Directory 应用程序吗?
【发布时间】:2017-06-13 02:18:34
【问题描述】:

我有一个 ASP.NET Web 表单站点,用户将使用 Azure Active Directory 登录。作为客户端,它调用 Asp.Net Core Web Api 站点,该站点将根据客户角色返回一些信息。 该方法类似于https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore 示例。

示例中的每个应用程序都有自己的 Azure Active Directory 应用程序。我的应用程序有很多应用程序角色,在两个应用程序中维护它们可能很烦人且容易出错。我希望客户端和服务使用相同的 AAD 应用程序,以避免在 2 个 AAD 应用程序中保持相同的角色。

我没有在示例中看到过这样的架构,这种方法有什么问题

我尝试实现它并收到一个“有希望的”错误,即“支持场景”。

AADSTS90009:应用程序正在为自己请求令牌。这 仅当使用 GUID 指定资源时才支持方案 基于应用标识符。

不幸的是,我不明白如何“使用基于 GUID 的应用标识符”指定资源。在我已经使用 GUID 的请求中 资源=https%3A%2F%2FMyDomain.onmicrosoft.com%2Fe0a25761-XXXX-XXXX-XXXX-2aefc7e3134d

关于更改 MS 论坛线程 https://social.msdn.microsoft.com/Forums/azure/en-US/3de0c14d-808f-47c3-bdd6-c29758045de9/azure-ad-authentication-issue-aadsts90009?forum=WindowsAzureAD#cf3986f5-3422-44d1-bcb7-3a4201f68fa2(I 上的一些 GUID 的建议要求澄清)也不清楚。

所以我的问题是:我可以在客户端和服务之间共享同一个 AAD 应用程序吗?如果可以,该怎么做

【问题讨论】:

    标签: asp.net webforms azure-active-directory openid-connect adal


    【解决方案1】:

    根据我的测试,普通的 Azure AD 租户不支持很好地混合客户端和服务器应用程序。

    这是我的尝试,供您参考:

    1 .通过如下修改清单授予应用程序本身的权限:

    "requiredResourceAccess": [
    {
      "resourceAppId": "{AppID}",
      "resourceAccess": [
        {
          "id": "{customOauth2PermissionsId}",
          "type": "Scope"
        }
      ]
    },
    {
      "resourceAppId": "00000002-0000-0000-c000-000000000000",
      "resourceAccess": [
        {
          "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
          "type": "Scope"
        }
      ]
    }
    ],
    

    2 .然后我们可以使用 OAuth2 代码授权流程获取令牌
    https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id={appId}&redirect_uri={redirectURL}&resource={appId}

    POST:https://login.microsoftonline.com/common/oauth2/token
    

    但是,在传递 access_token 时,我无法找到自定义的特定权限。如果您希望 Azure AD 普通租户支持此场景,可以通过here 提交反馈。

    【讨论】:

    • customOauth2PermissionsId、@fei-xue 是什么?
    【解决方案2】:

    我尝试为根据 https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-manifest 支持的 AAD 应用程序 (identifierURIs[]) 添加新的 App ID URI。 清单允许指定多个 identifierURIs,但门户(新的和经典的)只显示第一个 URI。新门户将 App ID URI 输入框突出显示为已更改并提示保存(实际上删除了第二个 URI)。

    但是我意识到我不需要两个 AAD 应用程序都具有角色。我可以拥有 2 个单独的 AAD 应用程序,并且只在其中一个中保留角色。网站客户端将对用户进行身份验证,但不检查角色本身。相反,它将调用应该具有 AAD 应用程序的 Web API 站点,该应用程序具有声明并分配给用户/用户组的所有应用程序角色。 Web API 可以根据客户端的请求为客户端提供角色/权限。

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 1970-01-01
      • 2020-02-15
      • 2017-07-29
      • 2012-02-04
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多