如何通过Microsoft Graph API创建证书以无交互连接MgGraph
用Microsoft Graph API创建证书以无交互连接MgGraph
权限要求
在调用Graph API前,确保你的身份拥有以下权限之一:
- 委派权限:
Application.ReadWrite.All(可管理所有应用)或Directory.AccessAsUser.All(可管理自己的应用) - 应用权限:
Application.ReadWrite.OwnedBy(仅管理自己拥有的应用)或Application.ReadWrite.All(管理所有应用)
注意:应用权限需要管理员提前授予同意。
方式1:上传现有公钥证书到Azure AD应用
如果你已经有生成好的证书(比如自签名证书),可以通过Graph API将其公钥关联到目标应用注册:
准备证书公钥:
提取证书的公钥部分,去掉-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----标记,将剩余内容转为Base64编码。调用Graph API:
发送POST请求到以下端点:https://graph.microsoft.com/v1.0/applications/{application-id}/addPassword请求体示例(JSON格式):
{ "passwordCredential": { "displayName": "无交互连接专用证书", "endDateTime": "2025-12-31T23:59:59Z", "startDateTime": "2024-01-01T00:00:00Z", "key": "MIICqDCCAZACCQ...", // 替换为你的证书公钥Base64 "type": "AsymmetricX509Cert" } }
方式2:让Azure AD自动生成证书
如果没有现成证书,可以让Azure AD直接生成证书并返回私钥(注意:私钥仅在响应中返回一次,需妥善保存):
发送POST请求到以下端点:
https://graph.microsoft.com/v1.0/applications/{application-id}/addPassword
请求体示例(JSON格式):
{ "passwordCredential": { "displayName": "Azure AD生成的无交互证书", "endDateTime": "2025-12-31T23:59:59Z", "startDateTime": "2024-01-01T00:00:00Z", "type": "AsymmetricX509Cert" } }
响应中的secretText字段即为PEM格式的私钥,将其保存为.pem或.pfx文件备用。
使用证书无交互连接MgGraph
证书关联到应用后,即可用以下PowerShell命令无交互连接:
通过证书指纹连接
Connect-MgGraph -ClientId "你的应用客户端ID" -TenantId "你的租户ID" -CertificateThumbprint "证书指纹"
通过证书文件连接
如果是PFX格式证书(带密码):
$certPassword = ConvertTo-SecureString "证书密码" -AsPlainText -Force Connect-MgGraph -ClientId "你的应用客户端ID" -TenantId "你的租户ID" -CertificatePath "C:\path\to\cert.pfx" -CertificatePassword $certPassword
注意事项
- 证书有效期需合理设置,避免频繁过期导致连接失败
- 目标应用注册需提前添加并授予你后续要调用的Microsoft Graph API权限(如
Mail.Read、User.Read.All等) - 若使用服务主体身份连接,需确保服务主体拥有足够的权限执行后续操作
内容的提问来源于stack exchange,提问作者NaveenChalla
相关产品推荐
相关产品推荐

