gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:30:05 24 4
gpt4 key购买 nike

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

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 wayfor 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com