gpt4 book ai didi

asp.net-web-api - Azure AD OAuth 客户端凭据流访问控制

转载 作者:行者123 更新时间:2023-12-04 12:17:51 27 4
gpt4 key购买 nike

我正在使用 Azure AD OAuth2 授权来保护我的 Web API。现在我需要支持两个 OAuth2 场景(流程)-

  • Web 应用程序访问 Web API,基于用户角色的 API 将为资源提供服务。
    这是使用授权 oauth 流程实现的,并且使用 Authorize[Role="Read"] 属性完成访问控制
  • 访问相同 Web API 的守护程序(控制台)应用程序。虽然我能够通过使用客户端凭据 oauth 流获取 token ,但我无法弄清楚如何管理对守护进程的访问

  • 一旦 token 发出,控制台就可以访问任何 API 方法。

    范围 - 当 grant_type 为“client_credentials”时,范围不是/token 端点的参数
    角色 - 不能使用它,因为它与用户相关联

    有人可以建议,我们如何在客户端凭据流中进行访问控制?以及我如何同时满足要求 1 和 2

    最佳答案

    可以在 Azure AD 的 API list 中为用户和应用程序定义“角色”。

    如果您想知道,应用程序角色实际上是应用程序权限。

    所以你可以在你的 API list 中有这样的东西(为了清楚起见,删除了其他属性):

    {
    "appRoles": [
    {
    "allowedMemberTypes": [
    "Application"
    ],
    "displayName": "Read all things",
    "id": "32028ccd-3212-4f39-3212-beabd6787d81",
    "isEnabled": true,
    "description": "Allow the application to read all things as itself.",
    "value": "Things.Read.All"
    },
    {
    "allowedMemberTypes": [
    "User"
    ],
    "displayName": "Read things",
    "id": "ef8d02ff-eee1-6745-9387-96587c358783",
    "isEnabled": true,
    "description": "Allow the user to read things.",
    "value": "Things.Read"
    }
    ]
    }

    所以我们定义了一个角色,它只允许应用程序作为其成员。这是一个应用程序权限。另一个是可以赋予​​用户和组的角色。

    然后,您可以向用户授予 Read things 角色,并为守护程序控制台应用程序授予 Read all things 应用程序权限。你实现了这两种情况:)

    您可以通过转至企业应用程序-> 您的 API-> 用户和组-> 添加用户来将角色添加到用户/组。选择您想要的用户/组,然后为他们选择一个角色(如果您只有一个角色,它将被预先选择)。

    After adding the role, the user will show up in the list

    您通过找到其他应用程序的应用程序注册->所需权限->添加->查找您的API->选择->从列表中检查您之前定义的应用程序权限来添加应用程序权限。然后您可以按授予权限按钮授予应用程序角色。

    Permissions required by the Web App on the API

    然后,您将获得任一场景的角色声明中的值。

    因此,在第一个场景中,角色声明将如下所示:
    "roles": [
    "Things.Read"
    ],

    在第二种情况下是这样的:
    "roles": [
    "Things.Read.All"
    ],

    关于asp.net-web-api - Azure AD OAuth 客户端凭据流访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45958615/

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