Azure AD删除已注册应用的权限

时间:2018-05-17 14:47:43

标签: azure azure-active-directory access-token

我正在使用Azure AD来保护我的服务以进行服务调用。 (每个服务在Azure AD中具有应用程序标识)。

示例:Application A想要访问Application B

我注意到,当使用客户端凭据流(带证书)请求来自Application A的accessstoken时,会发出accessstoken,而无需我明确设置访问Application B的权限。

这对我来说似乎很奇怪,因为返回的令牌将其受众设置为Application B,即使我没有明确指定它也可以访问。

如果我理解正确,默认情况下所有已注册的应用都可以互相访问?

Azure AD中是否有一种方法明确要求设置权限以便应用程序相互访问?

以下是Application A所需权限的屏幕截图。如您所见,此处未列出Application B

enter image description here

在以下屏幕截图中,我将TodoListService(又名应用程序B)分配给Application A所需的权限

enter image description here

1 个答案:

答案 0 :(得分:1)

  

我注意到,当使用客户端凭据流(带证书)请求来自应用程序A的accessstoken时,会发出一个accesstoken,而无需我明确设置访问应用程序B的权限。

是的,那个可能有点令人惊讶,我也不确定为什么会这样。

您需要做的是在API上定义应用程序权限,然后在客户端上分配它。 然后,您需要检查调用者是否在令牌中具有所需的应用程序权限。

我有一篇关于这个主题的文章:Defining permission scopes and roles offered by an app in Azure AD

要在API上定义应用程序权限,您必须在Azure AD中编辑其清单,并添加成员类型为Application的应用程序角色,如:

{
  "appRoles": [
  {
    "allowedMemberTypes": [
      "Application"
    ],
    "displayName": "Read all todo items",
    "id": "f8d39977-e31e-460b-b92c-9bef51d14f98",
    "isEnabled": true,
    "description": "Allow the application to read all todo items as itself.",
    "value": "Todo.Read.All"
  }
  ]
}

IIRC你必须为id生成一个GUID。 在API上定义此权限后,转到您的客户端应用程序,并在所需权限中添加应用程序权限。 然后,您应该按授予权限以授予应用程序权限。

现在,当客户端获取具有客户端凭据的令牌时,令牌将包含:

{
  "roles": [
    "Todo.Read.All"
  ]
}

因此,您必须检查是否存在。

相关问题