az 帐户获取访问令牌 - 无法在用户上下文中获取令牌



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

我尝试在用户的上下文

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+secret(来获取租户中任何应用程序的令牌。不过,该令牌没有任何权限,因此如果您正确进行授权,它将无效。

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

最新更新