azure - 想要了解 OAuth 代码流程,其中应用程序代表用户将 Access_Token 传递给 API 以获取资源

标签 azure oauth-2.0 azure-active-directory access-token

我想知道我的理解是否正确,也想进一步澄清我的疑问。

1)确认我的理解:

在下图中,我解释了我对使用 Azure AD 保护应用程序和 API 的理解。我已经使用 SCOPE 公开了 API,并且应用程序已通过权限模块使用了相同的 API。

enter image description here

有人可以确认我的理解是否正确吗?

2) 我们应该传递 ACCESS_TOKEN 中的角色吗?

这是我需要有人帮助我的地方。这是一个代码流,其中用户登录到应用程序,当他尝试获取待办事项列表时,应用程序向 API 发送请求。 在此通信中,应用程序获取登录用户的 ACCESS_TOKEN 并将其传递给发送至 API 的请求。

在 API 方面,我们制定了策略,检查通过 IHttpContextAccessor.HttpContext.User.Identity 传入的范围,并确保声明具有 scp/scope 并且具有正确的值。

现在,一切进展顺利。这里的问题是:

  1. 我们不应该在 ACCESS_TOKEN 中添加 Role(用户角色)吗? (当我说角色时 - 我的意思是用户的角色而不是应用程序的角色)

点击 Microsoft documentation 的链接当用户登录应用程序时,我获得了声明中的角色,但要调用 API,我必须使用我通过 TokenAcquisition.GetAccessTokenForUserAsync 获得的 ACCESS_TOKEN ,但它没有包括角色。它包括 SUB、userPreferedName、电子邮件和范围类型的详细信息(已在 jwt.io 中检查)

  • 如果问题#1的答案是“不,我们不应该”,API如何检查用户的角色并给出结果?这是我们只需要在 SCOPE 中填充的东西吗?
  • 引用号:https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps

    为了提供更好的上下文,我也在此处添加了我的 Azure 配置。

    enter image description here

    最佳答案

    1. Confirm my Understanding:

    根据您的截图,您的理解基本准确。

    Microsoft 身份平台在您登录后向您颁发访问 token ,然后您可以使用此访问 token 调用您的 Web API。 API 将验证访问 token 和权限/角色,这决定您是否可以访问其数据。

    此协议(protocol)图更便于您理解。

    enter image description here

    1. Should we pass Role in ACCESS_TOKEN?

    首先,您共享的链接与应用程序角色相关。但你不是在谈论那个。您所说的是 AAD 角色(例如全局管理员、组管理员)。如果有任何理解请指正。

    老实说,AAD 角色不应该包含在访问 token 中,因为它毫无意义。要访问您的Web API,您应该定义自己的角色来控制用户的权限。 AAD 角色仅在您尝试执行 AAD 或 Microsoft Graph 操作时才起作用。

    If the answer of Question #1 is "NO, we should not" what is the way for API to check the user's role and give the result?

    您已找到正确的指南:Add app roles to your application and receive them in the token .

    您应该使用应用程序角色。定义User app role 在代表您的 API 的 Azure AD 应用中assign your users to the role 。然后你的API可以通过 verifying scopes and app roles 检查用户的角色.

    还有另一种方法来控制用户的角色:使用组声明,您共享的链接中也提到了该方法。详细步骤列here .

    关于azure - 想要了解 OAuth 代码流程,其中应用程序代表用户将 Access_Token 传递给 API 以获取资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65573948/

    相关文章:

    azure - 在 WebApp 中禁用快速失败保护

    caching - 当文件从 VirtualPathProvider 作为 Stream 返回时维护文件的缓存控制属性

    java - Spring Boot 和 OAuth2.0 : At least one redirect_uri must be registered with the client

    java - 使用 XMPP、Spark 或 SparkWeb java 的 Facebook 聊天应用程序

    Azure Active Directory 强制执行图形端点而不是组声明

    Azure AppService 基于 EventHub 传入消息自动缩放

    java - 如何推迟事件触发/接收

    azure - 在 Multi-Tenancy 应用程序中,如何检查在 azure 门户中注册应用程序的租户数据?

    javascript - 使用 JavaScript 授权 Google 云端硬盘

    azure-active-directory - Azure AD 异常 - AADSTS50105 - “The signed in user is not assigned to a role for the application”。是否可以修改此消息?