0

我有一个名为“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”}

感谢您的帮助。

4

1 回答 1

0

您可能获得的令牌应该是访问令牌,而您要查找的角色应该在 id 令牌中。您是否通过在 azure 门户中启用“ID 令牌”来尝试此操作?

于 2021-10-18T14:16:50.850 回答