我有一个用户管理的身份,我想为它生成一个令牌
我尝试在用户的上下文
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。