我在 .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 范围的访问令牌。
有人可以建议如何实现这种情况以保持代码的高质量和安全性吗?
Azure AD 不会让您同时获取应用程序和 Azure DevOps 的令牌。以下是一些解决方法:
如果您的应用程序想要与用户的 Azure DevOps 对话,此方法很方便。
步骤:
基本上,您要求用户登录两次:第一次登录您的应用程序,然后登录 Azure DevOps。
步骤:
建议:我建议使用代表流程(OBO),这是第三个选项。如果您的应用程序经常代表用户与 Azure DevOps 进行通信,那么它非常适合。但所有选项都可以,因此请选择适合您需求的选项。