如何从服务获取范围列表以指定客户端身份验证请求

问题描述 投票:0回答:1

我有一个使用WebAccountManager进行AAD身份验证的UWP应用程序。我还有一个托管在Azure中的服务,由UWP应用程序使用。该服务使用UWP应用程序发送的令牌来获取另一个代表令牌(我认为这就是它的名称)然后以用户身份调用其他服务API(例如Microsoft Graph和Outlook REST API)。换句话说,UWP应用程序调用WebAuthenticationCoreManager.RequestTokenAsync来获取令牌,将其发送到我的服务,我的服务调用AuthenticationContext.AcquireTokenAsync以获取在调用Outlook REST API时使用的代表令牌。

在我的服务的AAD注册中,“必需权限”列出了它可能代表用户进行的所有服务和权限/ API调用(例如“Microsoft Graph” - >“具有对用户日历的完全访问权限”)

当我的UWP应用程序创建WebTokenRequest以传递到RequestTokenAsync函数时,它当前传递一个空字符串作为“范围”的值。应该为scope参数传递什么?它是否应该传递服务声明所需的完整且完整的权限列表?如果是这样,我如何获得客户端的权限列表?只要服务所需权限列表发生变化,只需硬编码并更新列表即可?

azure-active-directory azure-ad-graph-api
1个回答
0
投票

在Azure Active Directory中,有两种根本不同的方法可以指定应用在进行身份验证时所需的权限。

  1. 静态同意
  2. Dynamic Consent

返回Azure Active Directory V1端点,您可以在注册客户端应用程序时将“Required Permissions”设置为其他API。这是设置静态同意。这些权限是固定的,当您触发用户同意这些权限时,用户必须同时同意这些权限。此外,如果您的应用程序在某个时刻想要向其他API添加新权限,则需要强制用户再次获得完全同意体验,甚至可能需要在您的应用程序上使用特殊逻辑。

这就是为什么在V2端点中,Microsoft开发了增量和动态同意。

使用v2.0端点,您可以在应用程序的常规使用期间,在运行时动态指定应用程序所需的权限。为此,您可以通过将应用程序的范围参数包含在授权请求的范围参数中来指定应用程序在任何给定时间点所需的范围。

在这里,您只能指定应用程序完成当时尝试完成的流所需的权限。如果您需要更多访问权限,只需在身份验证体验期间添加它,它将仅提示用户获取这些新权限。

现在让我们回到你的问题。如果您使用的是V2端点,则应使用动态同意,这意味着“必需权限”中的设置对您来说并不重要。您应该在应用设置中保留应用所需的范围列表。

V2端点中的某些情况仍然需要静态同意,例如具有直接应用程序权限的服务调用服务。对于那些情况,你会通过范围<resource>/.default如所述here。这也适用于委托令牌,但最好只使用动态同意。

© www.soinside.com 2019 - 2024. All rights reserved.