gpt4 book ai didi

oauth-2.0 - Azure Active Directory - 如何将后端 API 应用注册限制为特定客户端应用注册

转载 作者:行者123 更新时间:2023-12-03 23:12:10 25 4
gpt4 key购买 nike

我可能完全不了解这是如何工作的,但这就是我想要实现的目标。

在 AAD 我有

  • 一个名为 backend-api 的应用注册表示 HTTP API
  • 一个名为 frontend-app 的应用注册代表某个客户端(假设是控制台应用程序)
  • 一个名为 another-app 的应用注册这与我的解决方案无关

  • 我有一个控制台应用程序,我将我的客户端 ID 和客户端密码放入 frontend-app我可以申请 access_tokenaudbackend-api .这太好了,正是我想要的。但是,我几乎可以从 another-app 做同样的事情如果我有该应用程序的客户端 ID 和客户端 key 。 我想完成的是只有frontend-app允许获得 access_tokenbackend-api .

    我不太确定如何配置该特定要求。我想也许我需要添加一个 appRoles allowedMemberTypes 的条目 Applicationbackend-api然后授予 frontend-app那个角色,但没有对 another-app 施加任何限制.同样我想也许 backend-api需要在企业应用程序下选中“需要用户登录”选项,但我找不到添加 frontend-app 的方法作为“用户”——无论如何可能是错误的方向。

    有什么方法可以告诉 AAD 只分发 access_tokensbackend-api ( aud 声明)如果他们是通过 frontend-app 请求的只要? 也许这是一个愚蠢的问题,而且这种方式行不通?

    最佳答案

    您正在考虑添加 appRoles 的想法是正确的。进入 backend-api然后将角色专门分配给 frontend-app .

    此外,请了解强制执行此要求,即只允许使用此新角色声明的应用程序,而其他应用程序则不允许,这是您的 API 代码的责任。

    接下来我将介绍 2 种具体方法。这两种方法都在 Microsoft Docs 上进行了解释 - Microsoft identity platform and the OAuth 2.0 client credentials flow

    方法 1 - 使用应用程序权限或角色

    配置您的 API 应用程序以公开一组应用程序权限(或角色)。

    这种方法更具声明性,因为您定义了一个应用程序权限,该权限需要分配给任何可以调用您的 backend-api 的应用程序。 .

    导航到 Azure Active Directory > 应用程序注册 > 应用程序注册 backend-api应用程序 > list

    添加一个新的应用程序角色.. 像这样使用 json:

    "appRoles": [
    {
    "allowedMemberTypes": [
    "Application"
    ],
    "displayName": "Can invoke my API",
    "id": "fc803414-3c61-4ebc-a5e5-cd1675c14bbb",
    "isEnabled": true,
    "description": "Apps that have this role have the ability to invoke my backend API",
    "value": "MyAPIValidClient"
    }]

    将应用权限分配给您的前端应用
    New-AzureADServiceAppRoleAssignment -ObjectId <frontendapp.ObjectId> -PrincipalId <frontendapp.ObjectId> -Id "fc803414-3c61-4ebc-a5e5-cd1675c14bbb" -ResourceId <yourbackendapi.ObjectId>

    使用客户端凭据授权,即使用 clientId 和客户端 secret ,将您的前端应用程序验证为后端 api.. 就像您可能已经在做的那样。

    现在,在后端 api 收到的身份验证 token 中,您可以检查角色声明集合是否必须包含名为“MyAPIValidClient”的角色,否则您可以拒绝未授权异常的调用。

    方法 2 - 使用访问控制列表

    当您的后端 API 收到 token 时,它可以解码 token 并从 appid 中提取客户端的应用程序 ID。和 iss claim 。然后它将应用程序与其维护的访问控制列表 (ACL) 进行比较。

    根据您的要求,API 可能仅向特定客户端授予完整权限的子集或所有权限。

    在某些情况下,第二种方法可能看起来更简单,但我更喜欢第一种方法,因为当您拥有多个应用程序权限/角色和基于这些角色提供不同级别的功能时,它可以很好地扩展。

    相关 SO 帖子和引用资料
  • 相关SO帖子- Is there a way to secure an Azure Function thatwill only be called from a specific Azure Logic App?
  • Microsoft Docs - Microsoft identity platform and the OAuth 2.0 client credentialsflow
  • 关于oauth-2.0 - Azure Active Directory - 如何将后端 API 应用注册限制为特定客户端应用注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56191182/

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