azure - Azure AD 删除已注册应用的权限
问题描述
我正在使用 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 中编辑其清单,并添加成员类型为 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"
]
}
所以你必须检查它是否存在。
推荐阅读
- amazon-web-services - 如何在 AWS CLI 过滤器中使用正则表达式
- javascript - SyntaxError: Unexpected token { 当试图在 es5 模块中导出一个类以在另一个模块中使用时
- c - 如何集成前缀检查器以根据文件读取查找完整的单词
- php - 如果不重定向到 https,则使用 https
- java - 立即在 Android 应用中禁用 NFC 的 API
- python-3.x - 仅当匹配时,如何合并两个数据框并从新列中的另一列返回数据?
- node.js - 使用 Node.js 访问 NTLM Api
- angular - 如何启用选中 Mat 表中的单个复选框的按钮?
- julia - 从 Julia 的字典中创建一个矩阵,其中的键是我必须拆分的字符串
- c# - 使用表达式主体成员可以提高一些性能?