0

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

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

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>"

这行得通。

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

4

1 回答 1

1

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

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

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

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

于 2020-08-10T17:47:27.483 回答