我正在使用 Azure AD 来保护我的服务调用。(每个服务在 Azure AD 中都有一个应用程序标识)。
示例:Application A
想要访问Application B
.
我注意到,当Application A
使用客户端凭据流(带证书)请求访问令牌时,会发出访问令牌,而无需我明确设置访问权限Application B
。
这对我来说似乎很奇怪,因为返回的令牌已将其受众设置为Application B
甚至认为我没有明确授予它访问权限。
如果我理解正确,默认情况下所有注册的应用程序都可以相互访问?
Azure AD 中是否有一种方法可以明确要求设置权限才能使应用程序相互访问?
以下是Application A
所需权限的屏幕截图。如您所见,Application B
此处未列出。
在下面的屏幕截图中,我将TodoListService
(又名应用程序 B)分配给了所需的权限Application A
我注意到,当使用客户端凭据流(带证书)从应用程序 A 请求访问令牌时,无需我显式设置访问应用程序 B 的权限即可发出访问令牌。
是的,这可能有点令人惊讶,我也不知道为什么会这样。
您需要做的是在 API 上定义应用程序权限,然后在客户端分配。然后您需要检查调用者在令牌中是否具有所需的应用程序权限。
我有一篇关于此主题的文章:定义 Azure AD 中应用程序提供的权限范围和角色。
要在 API 上定义应用权限,您必须在 Azure AD 中编辑其清单,并添加成员类型为应用程序的应用角色,例如:
{
"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"
]
}
所以你必须检查它是否存在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句