我有一个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应用程序,如果是,那该怎么做?
答案 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
但是,在使用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可以根据客户端的请求为客户端提供角色/权限。