我正在使用Azure来保护我的服务以服务于呼叫。(每个服务都具有Azure AD中的应用程序标识)。
示例:Application A希望访问Application B。
我注意到,当使用客户端凭据流(有证书)从Application A请求访问时,会发出访问证书,而不需要我显式设置访问Application B的权限。
这在我看来很奇怪,因为返回的令牌将其受众设置为Application B,甚至还以为我没有显式地授予它访问权限。
如果我理解正确的话,所有注册的应用程序默认都可以相互访问?。
Azure AD中是否有一种方法可以显式地要求设置权限,以便应用程序相互访问?
下面是Application A所需权限的屏幕截图。如您所见,这里没有列出Application B。

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

发布于 2018-05-17 16:00:51
我注意到,当使用客户端凭据流(带证书)从应用程序A请求访问时,颁发的访问证书不需要我显式设置访问应用程序B的权限。
是的,这可能有点令人惊讶,我也不知道为什么会这样。
您需要做的是在API上定义应用程序权限,然后在客户机上分配它。然后,您需要检查调用方是否在令牌中具有所需的应用程序权限。
我有一篇关于这个主题的文章:在Azure AD中定义应用程序提供的权限范围和角色。
要在API上定义应用程序权限,您必须在Azure AD中编辑其清单,并添加一个具有成员类型Application的app角色,如下所示:
{
"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"
}
]
}你必须为身份生成一个GUID。在API上定义此权限后,转到客户端应用程序,并在所需权限中添加应用程序权限。然后,您应该按Grant权限来授予应用程序权限。
现在,当客户端获取具有客户端凭据的令牌时,令牌将包含:
{
"roles": [
"Todo.Read.All"
]
}所以你得检查一下它是否存在。
https://stackoverflow.com/questions/50394388
复制相似问题