如何通过Azure应用注册实现多资源授权?

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

我在 .NET 6 Web 应用程序(带有授权代码流的 OAuth 2)中遇到身份验证配置问题。我决定通过 Azure 应用程序注册来实施身份验证。添加必要的平台、重定向 URL、确定范围后,一切都变得非常顺利。我的.NET应用程序中的业务逻辑需要连接到Azure DevOps平台API,因此我想使用相同的Azure应用程序注册表来配置DevOps API授权,因此我添加了Azure DevOps的API权限。我的目的是在我的应用程序中使用相同的 Bearer 进行授权,然后在登录用户的上下文中在 Azure DevOps API 中使用相同的 Bearer 进行授权,因此我大肆地添加了两个范围:

api://tenantid/custom_scope_name                        // my custom scope
499b84ac-1321-427f-aa17-267ca6975798/user_impersonation // const azure devops scope

之后,我遇到了以下错误:

AADSTS28003: Provided value for the input parameter scope cannot be empty when requesting an access token using the provided authorization code. Please specify a valid scope.

我发现 Microsoft 不允许为多个资源指定范围,因此我开始寻找如何解决该问题。我遇到了两种潜在的“解决方法”,尽管我还不清楚它们的可靠性。

首先,我可以获得 Azure DevOps 范围的访问令牌并在我的应用程序中禁用受众验证。这种方法可行,但似乎不是推荐的解决方案。

其次,我可以获得自定义应用程序范围的访问令牌,在我的应用程序中对其进行授权,并向我的应用程序发送刷新令牌。通过这种方法,我可以使用收到的刷新令牌获取 Azure DevOps API 范围的访问令牌。

有人可以建议如何实现这种情况以保持代码的高质量和安全性吗?

c# .net azure azure-devops authorization
1个回答
0
投票

Azure AD 不会让您同时获取应用程序和 Azure DevOps 的令牌。以下是一些解决方法:


1. 获取 Azure DevOps 令牌并跳过安全检查

  • :易于实施。
  • :这有点冒险,因为它跳过了安全检查。

2. 对多个令牌使用刷新令牌

  • :更安全。将刷新令牌视为“可重复使用的通行证”,无需再次询问用户即可获得新的访问权限。
  • :需要更多的时间来设置,而且你必须保证刷新令牌的安全。

3. 代表流程 (OBO)

如果您的应用程序想要与用户的 Azure DevOps 对话,此方法很方便。

  • :专为这种情况而设计,并且安全。
  • 不好:第一次设置可能有点棘手。

步骤

  1. 用户登录您的应用程序。
  2. 您的应用程序获得令牌。
  3. 您的应用程序使用该令牌为 Azure DevOps 获取不同的令牌。

4. 获得两个代币,一个接一个

基本上,您要求用户登录两次:第一次登录您的应用程序,然后登录 Azure DevOps。

  • :将事物分开。
  • 不好:对于用户来说可能有点乏味,因为他们可能会被请求两次许可。

步骤

  1. 用户登录您的应用程序。
  2. 然后,他们登录 Azure DevOps。
  3. 使用正确的令牌执行正确的任务。

建议:我建议使用代表流程(OBO),这是第三个选项。如果您的应用程序经常代表用户与 Azure DevOps 进行通信,那么它非常适合。但所有选项都可以,因此请选择适合您需求的选项。

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