客户端和服务Web应用程序可以共享同一个Azure Active Directory应用程序吗?

时间:2017-01-27 11:49:16

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

我有一个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应用程序,如果是,那该怎么做

2 个答案:

答案 0 :(得分:2)

根据我的测试,普通的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

enter image description here

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

答案 1 :(得分:0)

我尝试为根据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可以根据客户端的请求为客户端提供角色/权限。