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

时间:2019-05-17 17:40:29

标签: oauth-2.0 azure-active-directory access-token microsoft-identity-platform

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

在AAD中,我有

  • 名为backend-api的应用注册,代表HTTP API
  • 名为frontend-app的应用注册,代表某些客户端(例如控制台应用)
  • 名为another-app的应用注册,与我的解决方案无关。

我有一个控制台应用程序,其中输入了frontend-app的客户ID和客户密码,我可以用access_token的{​​{1}}请求一个aud。这太好了,正是我想要的。但是,如果我拥有该应用的客户端ID和客户端密码,则可以从backend-api进行相同的操作。 我要完成的工作是只允许another-app换取frontend-app的{​​{1}}。

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

如果仅通过backend-api要求AAD发出frontend-appaccess_tokens声明)的backend-api的方法是什么?也许这是一个愚蠢的问题,而且这样行不通吗?

1 个答案:

答案 0 :(得分:2)

您正在考虑向appRoles添加backend-api条目,然后将角色专门分配给frontend-app的正确方法。

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

接下来,我将介绍2种具体方法。两种方法均在此处的Microsoft文档中进行了说明-Microsoft identity platform and the OAuth 2.0 client credentials flow

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

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

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

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

使用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和客户端密码)将前端应用程序身份验证为后端api。

现在,在后端api收到的身份验证令牌中,您可以检查角色声明集合中是否包含名为“ MyAPIValidClient”的角色,否则可以拒绝带有未授权异常的呼叫。

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

当后端API收到令牌时,它可以对令牌进行解码并从appidiss声明中提取客户端的应用程序ID。然后,它将应用程序与其维护的访问控制列表(ACL)进行比较。

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

在某些情况下,第二种方法似乎更简单,尽管我更喜欢第一种方法,因为当您具有多个应用程序权限/角色并且根据这些角色提供不同级别的功能时,它可以很好地扩展。

相关的SO帖子和参考

相关问题