使用 Microsoft Graph 和仅限应用的身份验证生成 PowerShell 脚本
本教程介绍如何生成一个 PowerShell 脚本,该脚本使用 Microsoft Graph API 使用仅应用身份验证访问数据。 对于需要访问组织中所有用户的数据的后台服务或应用程序,仅应用身份验证是一个不错的选择。
注意
若要了解如何使用 Microsoft Graph 代表用户访问数据,请参阅此 用户 (委托) 身份验证教程。
在本教程中,你将:
提示
作为本教程的替代方法,可以下载或克隆 GitHub 存储库 ,并按照 README 中的说明注册应用程序并配置项目。
先决条件
在开始本教程之前,应在开发计算机上安装 PowerShell 。 PowerShell 5.1 是最低要求,但建议使用 PowerShell 7。
还应具有具有全局管理员角色的Microsoft工作或学校帐户。 如果没有 Microsoft 365 租户,则可以通过 Microsoft 365 开发人员计划获得租户;有关详细信息,请参阅 常见问题解答。 或者,可以 注册 1 个月的免费试用版或购买 Microsoft 365 计划。
注意
本教程使用 PowerShell 7.2.2 和 Microsoft Graph PowerShell SDK 版本 1.9.5 编写。 本指南中的步骤可能适用于其他版本,但尚未测试。
在门户中注册该应用
在本练习中,你将在 Microsoft Entra 中注册一个新应用程序,以启用 仅限应用的身份验证。
创建自签名证书
Microsoft Graph PowerShell SDK 需要证书进行仅限应用的身份验证。 出于开发目的,自签名证书就足够了。 需要一个证书,其中包含在本地计算机上安装的私钥,并在 中导出公钥。CER、。PEM 或 。CRT 文件。
在 Windows 上,可以使用 pki PowerShell 模块 生成证书。
$cert = New-SelfSignedCertificate -Subject "CN=PowerShell App-Only" -CertStoreLocation `
"Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 `
-KeyAlgorithm RSA -HashAlgorithm SHA256
Export-Certificate -Cert $cert -FilePath "./PowerShellAppOnly.cer"
注册应用程序进行仅限应用的身份验证
在本部分中,你将注册一个应用程序,该应用程序将支持使用 客户端凭据流进行仅限应用的身份验证。
打开浏览器,导航到 Microsoft Entra 管理中心 ,并使用全局管理员帐户登录。
在左侧导航栏中选择“Microsoft Entra ID”,依次展开“标识”、“应用程序”和“应用注册”。
选择“新注册”。 输入应用程序的名称,例如
Graph App-Only Auth Tutorial
。将 “支持的帐户类型 ”设置为 “仅此组织目录中的帐户”。
保留“重定向 URI”为空。
选择“注册”。 在应用程序的 “概述 ”页上,复制 “应用程序 (客户端) ID ”和 “目录 (租户) ID ”的值并保存它们,下一步将需要这些值。
在“管理”下选择 “API 权限”。
删除“配置权限”下的默认 User.Read 权限,方法是在其行中选择省略号 (...) 并选择“删除权限”。
选择“ 添加权限”,然后选择 “Microsoft Graph”。
选择“应用程序权限”。
选择 “User.Read.All”,然后选择“ 添加权限”。
选择“ 授予管理员同意...”,然后选择“ 是 ”,为所选权限提供管理员同意。
在“管理”下选择“证书和机密”,然后选择“证书”。
选择 “上传证书”。 上传在上一步中创建 的 PowerShellAppOnly.cer 或 powershell.crt 文件,然后选择“ 添加”。
注意
请注意,与注册用户身份验证时的步骤不同,在本部分中,你配置了对应用注册Microsoft Graph 权限。 这是因为仅应用身份验证使用 客户端凭据流,这需要在应用注册上配置权限。 有关详细信息 ,请参阅 .default 范围 。
添加仅限应用的身份验证
在本部分中,你将通过 Microsoft Graph PowerShell SDK 使用仅限应用的身份验证。
使用仅限应用的身份验证进行连接
使用以下命令断开任何现有 Microsoft Graph 连接。
Disconnect-MgGraph
打开 PowerShell 并使用以下命令设置
$clientID
会话变量,将 <your-client-id> 替换为应用注册的客户端 ID。$clientId = <your-client-id>
$tenantId
设置会话变量,将 <your-tenant-id> 替换为组织的租户 ID。$tenantId = <your-tenant-id>
将
$certificate
会话变量设置为在上一步中创建的证书的主题。$certificate = "CN=PowerShell App-Only"
Connect-MgGraph
使用 命令使用上一步中的证书进行身份验证。Connect-MgGraph -ClientId $clientId -TenantId $tenantId -CertificateName $certificate
使用
Get-MgContext
验证是否已使用仅限应用的身份验证进行身份验证。 验证 AuthType 是否为AppOnly
。PS > Get-MgContext ClientId : 2fb1652f-a9a0-4db9-b220-b224b8d9d38b TenantId : 601faea3-be45-4960-898f-92b379b17cd9 CertificateThumbprint : Scopes : {User.Read.All} AuthType : AppOnly AuthProviderType : ClientCredentialProvider CertificateName : CN=PowerShell App-Only Account : AppName : PowerShell Graph Tutorial ContextScope : Process Certificate : PSHostVersion : 2022.4.1 ClientTimeout : 00:05:00
列出用户
在本部分中,你将使用仅限应用的身份验证列出 Azure Active Directory 中的所有用户。
在经过身份验证的 PowerShell 会话中,运行以下命令以列出用户。
Get-MgUser -Select "displayName,id,mail" -Top 25 -OrderBy "displayName"
查看输出。
Id DisplayName Mail UserPrincipalName UserType -- ----------- ---- ----------------- -------- 05fb57bf-2653-4396-846d-2f210a91d9cf Adele Vance AdeleV@contoso.com a36fe267-a437-4d24-b39e-7344774d606c Alex Wilber AlexW@contoso.com 54cebbaa-2c56-47ec-b878-c8ff309746b0 Allan Deyoung AllanD@contoso.com 9cb2ad7c-8e69-46a6-a947-a02c255048de Automate Bot 9a7dcbd0-72f0-48a9-a9fa-03cd46641d49 Bianca Pisani a8989e40-be57-4c2e-bf0b-7cdc471e9cc4 Brian Johnson (TAILSPIN) BrianJ@contoso.com 9e2d4937-44ee-4af4-bd56-77a12cc3ecc4 Cameron White 8990227d-31dc-4120-a38e-f652576974f4 Christie Cline ChristieC@contoso.com ...
代码说明
请考虑用于列出用户的命令。
- 它使用
-Select
请求特定属性 - 它使用
-Top
来限制返回的用户数 - 它使用
-OrderBy
对响应进行排序
可选:添加自己的代码
在本部分中,你将使用自己的 Microsoft Graph PowerShell SDK 命令。 这可能是Microsoft Graph 文档 或 Graph 资源管理器中的代码片段,也可以是你创建的代码片段。 此部分是可选的。
选择 API
在 Microsoft Graph 中查找想要尝试的 API。 例如, 列表组 API。 可以使用 API 文档中的示例之一,在 Graph 资源管理器中自定义 API 请求并使用生成的代码片段,或使用 Find-MgGraphCommand
命令查找相应的命令。
例如,用于列出组的 API 终结点为 GET /groups
。 可以使用它查找相应的 PowerShell 命令。
PS > Find-MgGraphCommand -Uri "/groups" -Method "GET"
APIVersion: v1.0
Command Module Method URI OutputType Permissions
------- ------ ------ --- ---------- -----------
Get-MgGroup Groups GET /groups IMicrosoftGraphGroup {Directory.Read.All, Directory.ReadWrite.All, Group.Read.All, G…
APIVersion: beta
Command Module Method URI OutputType Permissions
------- ------ ------ --- ---------- -----------
Get-MgGroup Groups GET /groups IMicrosoftGraphGroup1 {Directory.Read.All, Directory.ReadWrite.All, Group.Read.All, …
输出指示命令 Get-MgGroup
是相应的命令。
配置权限
查看所选 API 的参考文档 的“权限” 部分,了解支持哪些身份验证方法。 例如,某些 API 不支持仅限应用。
若要调用具有仅应用身份验证 (API(如果 API 支持) ),请在 Azure AD 管理中心中添加所需的权限范围。 请确保使用仅限应用的权限断开连接和重新连接。
提示
-ForceRefresh
将 参数与 命令结合使用Connect-MgGraph
可确保应用新配置的权限。
运行命令
现在,你已使用所需的权限进行连接,请运行所选命令。
恭喜!
你已完成 PowerShell Microsoft Graph 仅限应用的教程。 现在,你已有一个可调用 Microsoft Graph 的工作应用,可以试验和添加新功能。
- 了解如何通过 Microsoft Graph PowerShell SDK 使用 用户 (委托) 身份验证 。
- 访问 Microsoft Graph 概述 ,查看可以使用 Microsoft Graph 访问的所有数据。
你有关于此部分的问题? 如果有,请向我们提供反馈,以便我们对此部分作出改进。