客户端和服务 Web 应用程序能否共享同一个 Azure Active Directory 应用程序?
Can client and service web applications share the same Azure Active Directory Application?
我有一个 ASP.NET Web 表单站点,用户将在其中使用 Azure Active Directory 登录。作为客户端,它调用 Asp.Net Core Web Api 站点,该站点将 return 一些信息,具体取决于客户角色。
该方法类似于 https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore 示例。
示例中的每个应用程序都有自己的 Azure Active Directory 应用程序。我的应用程序有很多应用程序角色,在两个应用程序中维护它们可能很烦人且容易出错。我希望客户端和服务使用相同的 AAD 应用程序以避免在 2 个 AAD 应用程序中维护相同的角色。
我没有在示例中看到这样的架构,这种方法有什么问题吗?
我尝试实现它并收到 "promising" 错误,即 "scenario is supported"。
AADSTS90009: Application is requesting a token for itself. This
scenario is supported only if resource is specified using the GUID
based App Identifier.
很遗憾,我不明白如何指定资源 "using the GUID based App Identifier"。在我已经使用 GUID 的请求中
资源=https%3A%2F%2FMyDomain.onmicrosoft.com%2Fe0a25761-XXXX-XXXX-XXXX-2aefc7e3134d
关于更改 MS 论坛线程中某些 GUID 的建议 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 在那里要求澄清)也不清楚。
所以我的问题是:我可以在客户端和服务之间共享同一个 AAD 应用程序吗?如果可以,该怎么做?
根据我的测试,普通的 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.
我尝试为根据 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 应用程序,并且只在其中一个中保留角色。网站客户端将对用户进行身份验证,但不检查角色本身。相反,它会调用 Web API 站点,该站点应该具有 AAD 应用程序,所有应用程序角色都已声明并分配给 users/user 组。 WebAPI可以根据客户的要求向客户提供roles/permissions
我有一个 ASP.NET Web 表单站点,用户将在其中使用 Azure Active Directory 登录。作为客户端,它调用 Asp.Net Core Web Api 站点,该站点将 return 一些信息,具体取决于客户角色。 该方法类似于 https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore 示例。
示例中的每个应用程序都有自己的 Azure Active Directory 应用程序。我的应用程序有很多应用程序角色,在两个应用程序中维护它们可能很烦人且容易出错。我希望客户端和服务使用相同的 AAD 应用程序以避免在 2 个 AAD 应用程序中维护相同的角色。
我没有在示例中看到这样的架构,这种方法有什么问题吗?
我尝试实现它并收到 "promising" 错误,即 "scenario is supported"。
AADSTS90009: Application is requesting a token for itself. This scenario is supported only if resource is specified using the GUID based App Identifier.
很遗憾,我不明白如何指定资源 "using the GUID based App Identifier"。在我已经使用 GUID 的请求中 资源=https%3A%2F%2FMyDomain.onmicrosoft.com%2Fe0a25761-XXXX-XXXX-XXXX-2aefc7e3134d
关于更改 MS 论坛线程中某些 GUID 的建议 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 在那里要求澄清)也不清楚。
所以我的问题是:我可以在客户端和服务之间共享同一个 AAD 应用程序吗?如果可以,该怎么做?
根据我的测试,普通的 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.
我尝试为根据 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 应用程序,并且只在其中一个中保留角色。网站客户端将对用户进行身份验证,但不检查角色本身。相反,它会调用 Web API 站点,该站点应该具有 AAD 应用程序,所有应用程序角色都已声明并分配给 users/user 组。 WebAPI可以根据客户的要求向客户提供roles/permissions