az account get-access-token - 无法在用户上下文中获取令牌

az account get-access-token - fails to fetch token in user's context

我有一个用户管理的身份,我想为其生成一个令牌

我在用户的上下文中尝试过

az login
az account get-access-token --resource "<client-id of user managed identity>"

我收到错误

Get Token request returned http error: 400 and server response: {"error":"invalid_grant","error_description":"AADSTS65001: The user or administrator has not consented to use the application with ID '04b07795-8ddb-461a-bbee-02f9e1bf7b46' named 'Microsoft Azure CLI'. Send an interactive authorization request for this user and resource.

关于上述错误,我遇到了建议将 Azure CLI 添加为 preAuthorizedApplication 的线程。但是我没有在 App Registrations 中找到这个托管身份我确实在“企业应用程序”中找到了一个条目,但没有找到如何在这里预授权 Azure CLI。

我试图在非用户上下文中实现同样的效果

az login --service-principal -u <capp-id>  -p <client-secret> --tenant <tenant-id>
az account get-access-token --resource "<client-id of user managed identity>"

这有效。

为什么命令在用户上下文中失败?我怎样才能让它发挥作用?

托管身份没有应用程序注册,只有服务主体(又名企业应用程序)。

在我看来,您尝试使用它们的方式并不是它们应有的使用方式。

第二个工作实际上只是 Azure AD 的功能,它允许应用程序使用客户端凭据流(客户端 ID + 密码)为租户中的任何应用程序获取令牌。 该令牌没有任何权限,因此如果您正确进行授权,它将无效。

您通常不想将托管身份用作令牌目标,仅用于获取令牌。 因此,如果您需要保护 API,则需要应用注册,然后您可以在其中允许 Az CLI 调用它。 您还可以定义应用程序权限并允许使用客户端凭据流的应用程序以适当的授权访问 API。