在Azure函数(Python)中使用带有系统分配的托管标识的Graph API



我已通过以下指南成功地将应用程序权限添加到我的系统分配的托管身份/服务主体/MSI(企业应用程序(,该应用程序连接到Azure功能。

https://gist.githubusercontent.com/JanVidarElven/32b8f6bb8a422c9cce1816582eef24d8/raw/1148f1a96a351acf1a0fcf282e187ef1d2398fb1/AddManagedIdentityMSGraphAppRoles.md

我以前使用过一个单独创建的应用程序注册/企业应用程序,并使用其中的一个秘密来获取令牌,以便在向Microsoft Graph API发送请求时使用。

def get_auth_token_appreg(secret):
app = msal.ConfidentialClientApplication(appreg_client_id, authority=appreg_tenant_id, client_credential=secret)
result = None
result = app.acquire_token_silent(default_scope, account=None)
if not result:
result = app.acquire_token_for_client(default_scope)
return result["access_token"]

如果不使用Python中的应用程序注册密钥,我不知道如何(如果可能的话(使用这个MSI。由于没有应用程序注册,我甚至不确定我不能得到这个MSI的秘密。我不想使用秘密,而是使用MSI(带有它的权限(,因为秘密有点违背了向MSI添加权限的目的。

有什么想法吗?

在评论中得到了一些帮助。

向托管标识添加权限,如果将应用程序类型更改为托管标识,则可以在企业应用程序的列表中找到该权限。

Powershell添加权限指南:

https://gist.githubusercontent.com/JanVidarElven/32b8f6bb8a422c9cce1816582eef24d8/raw/1148f1a96a351acf1a0fcf282e187ef1d2398fb1/AddManagedIdentityMSGraphAppRoles.md

发布令牌的Python代码:

default_scope = "https://graph.microsoft.com/.default"
def get_token():
credential = DefaultAzureCredential()
token = credential.get_token(default_scope)
return token[0]

请确保颁发的令牌具有正确的角色/权限。您可以使用https://jwt.ms/以检查令牌。

最新更新