我有一个名为“BackEnd_API”的 Web API“应用程序注册”,它定义了一些应用程序角色和用户角色。
{
"allowedMemberTypes": [
"Application"
],
"description": "resource.READ allows you read access to all items in the application",
"displayName": "resource.READ",
"id": "9650cfb9-570d-4b79-1337-a01337ed6c29",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "resource.READ"
},
然后,我有另一个名为“Client_App”的客户端应用程序“应用程序注册”,它使用我使用 Azure_CLI 或 PowerShell 分配了 AppRoles“resource.READ”的那个 API。在 Azure 门户中,我可以看到为服务主体分配了该角色。当我使用 Client_Credentials 流时,生成的访问令牌确实包含我在后端用来授权调用者的角色声明。直到这里一切都好。
现在,我想使用托管身份从另一个使用应用程序使用相同的 Web API“BackEnd_API”。因此,我创建了另一个“应用服务”,启用了系统分配标识并使用 Azure CLI 分配了 AppRoles“resource.READ”。在 Azure 门户中,我可以看到为服务主体分配了该角色。
我可以使用 JS Azure SDK 获取令牌。
var withClientSecretCredential = () => {
require("@azure/core-auth");
require('dotenv').config()
const {
ManagedIdentityCredential
} = require("@azure/identity");
const logger = require('@azure/logger');
logger.setLogLevel('info');
// Load the .env file if it exists
const credentials = new ChainedTokenCredential(
new ManagedIdentityCredential("54e5c672-872f-4866-b067-132973cb0c91"),
);
token = credentials.getToken(['api://e22fd9eb-3088-4155-936a-0919681c3eb5/.default']);
return token
但是在这种情况下接收到的令牌没有“角色”声明,因此 API 调用无法授权。
我仔细检查了角色和分配,一切看起来都不错;这应该有效吗?
没有“角色”声明的令牌。
{ “aud”:“e22fd9eb-3088-4155-936a-0919681c3eb5”,“iss”:“https://login.microsoftonline.com/45591230-6e37-4be7-acfb-4c9e23b261ea/v2.0”,“iat” :1634550153,“nbf”:1634550153,“exp”:1634636853,“aio”:“E2ZgYGguYd9fNkv3pOV5Iduv2655AgA=”,“azp”:“7dd894ca-6c1b-45ae-b67c-75db99593a14”,“azpacr” “:” 54E5C672-872F-4866-B067-132973CB0C91“,” RH”:“ 0.ARAYH9ZRTDU50US-0YEEI7JH6SQU2H0BBBKBBKBBK5FTNX125LZOHQQAEAA。 6e37-4be7-acfb-4c9e23b261ea”,“uti”:“qOLzTFlmw0yuWeFXXT1pAA”,“ver”:“2.0”}
感谢您的帮助。