当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 将基于证书的身份验证与 Microsoft Graph PowerShell SDK 结合使用

作者:精品下载站 日期:2024-12-14 04:04:27 浏览:14 分类:玩电脑

将基于证书的身份验证与 Microsoft Graph PowerShell SDK 结合使用


远离交互式会话

在更新使用 Microsoft Graph PowerShell SDK 访问 Microsoft 365 数据的 Azure AD 帐户的许可证等文章中,我们使用了在交互式会话中发出的命令。正如我在本文中指出的那样,这种方法非常适合探索 Graph SDK cmdlet 的工作原理,同时也为程序员和管理员提供了一些需要理解的要点。最严重的问题是权限累积,随着时间的推移收集的同意意味着用于 SDK 的服务主体可能会获得过度许可。解决方案是使用在 Azure AD 中注册的单独应用程序,并获得足够的权限来完成工作;这带来了管理挑战,但更安全。

如果您选择使用注册应用程序,则可以使用仅应用程序身份验证而不是委派访问权限。仅应用程序身份验证意味着应用程序使用 X.509 证书作为其凭据。该证书可以是自签名的(用于测试目的)或由证书颁发机构颁发。 Microsoft 有关对 Microsoft Graph PowerShell SDK 使用仅应用程序身份验证的文档包含配置在 Azure AD 中注册的应用程序以进行仅应用程序身份验证的步骤。本文介绍了我使用这些步骤的经验。

获得证书

您可能没有等待使用的 X.509 证书,但使用 PowerShell 可以轻松创建它们。此代码示例运行 New-SelfSignedCertificate cmdlet 来创建一个新证书,该证书存储在运行该命令的工作站上当前用户的本地证书存储中:

$Cert = New-SelfSignedCertificate -DnsName office365itpros.onmicrosoft,com -CertStoreLocation "Cert:\CurrentUser\My" -FriendlyName "MicrosoftGraphSDK" -Subject "Test Cert for Microsoft Graph SDK"
Get-ChildItem "Cert:\CurrentUser\My$($Cert.thumbprint)"

PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
FC92991B21219F178AFB37C12DF231B6AFC3D790  CN=office365itpros.onmicrosoft

如果要在本地计算机的证书存储中创建证书,请指定Cert:\LocalMachine\My 作为存储位置。如果您以管理员身份运行 PowerShell,则只能在本地计算机存储中创建新证书。出于测试目的,可以将您使用的证书存储在商店中。当需要将某些内容投入生产时,您需要在运行代码的计算机上安装不同的证书。

创建证书后,我们将其导出到 .cer 文件。这是我所做的:

Get-ChildItem "Cert:\CurrentUser\My$($Cert.thumbprint)" | Export-Certificate -FilePath C:\temp\MicrosoftGraphSDK.cer

    Directory: C:\temp

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        06/10/2021     17:01            861 MicrosoftGraphSDK.cer

将证书连接到应用程序

Azure AD 注册的应用程序充当容器来保存对一组图形权限的同意。这些权限使应用程序能够使用图形查询访问数据。当脚本使用仅应用程序身份验证进行连接时,它通过传递应用程序已知的证书的指纹而不是交互式密码或应用程序机密等其他机制来进行身份验证。

为此,我们必须将使用 Export-Certificate cmdlet 创建的证书文件加载到应用程序中。这是通过转到应用程序属性的证书和机密部分并选择上传证书选项来完成的(图 1)。

[玩转系统] 将基于证书的身份验证与 Microsoft Graph PowerShell SDK 结合使用

请记住,应用程序拥有我们想要用于图形查询的权限,我们需要向应用程序添加所需的图形权限。确切的权限根据应用程序想要访问的数据而有所不同。您可以通过在交互式会话中运行代码来进行试验,找出正确的权限集,然后将它们添加到应用程序中。在图 2 中,我添加了五个应用程序权限,范围从 Auditlog.Read.All(需要读取用户登录数据)到 User.Read.All(需要阅读有关用户帐户的信息)。

[玩转系统] 将基于证书的身份验证与 Microsoft Graph PowerShell SDK 结合使用

请注意,委派的User.Read权限已被删除。这是我们不需要的默认权限。

连接到 Microsoft Graph

我们需要三条信息才能使用 Connect-MgGraph cmdlet 连接到 Graph:

  • 租户标识符。您可以从应用程序属性中复制它。
  • 应用程序标识符。同样,这可以在应用程序属性中找到。
  • 证书指纹。这可以作为证书的属性提供(请参见上面的示例)。

有了这些信息,我们可以运行如下命令(请记住根据您的租户的情况替换租户标识符、应用程序标识符和证书指纹值):

Connect-MgGraph -TenantId "a562313f-14fc-43a2-9a7a-d2e27f4f3478" -AppId "d86b1929-b818-411b-834a-206385bf5347" -CertificateThumbprint "FC92991B21219F178AFB37C12DF231B6AFC3D790"

Welcome To Microsoft Graph!

要检查您是否已使用正确的设置进行连接,请运行 Get-MgContext cmdlet。这里要检查的重要事项是客户端标识符、租户标识符和指纹的输入设置以及可用的权限(范围)。上下文范围应报告 Process,而不是 CurrentUser(交互式登录),并且不应显示帐户名称。

Get-MgContext

ClientId              : d86b1929-b818-411b-834a-206385bf5347
TenantId              : a562313f-14fc-43a2-9a7a-d2e27f4f3478
CertificateThumbprint : FC92991B21219F178AFB37C12DF231B6AFC3D790
Scopes                : {Group.Read.All, MailboxSettings.Read, User.Read.All, Organization.ReadWrite.All...}
AuthType              : AppOnly
AuthProviderType      : ClientCredentialProvider
CertificateName       :
Account               :
AppName               : Microsoft Graph PowerShell SDK Cert
ContextScope          : Process
Certificate           :

如果出现问题,请运行 Disconnect-MgGraph cmdlet 终止会话,返回并检查应用设置(特别是,确保已同意所有必需的权限),然后再试一次。

运行代码

使用正确的权限成功连接后,您就可以运行代码。与往常一样,交互式提示不起作用,因此可能需要进行一些调整才能获取为交互式会话创建的代码并使其在后台作业中工作。之后,需要弄清楚操作细节,例如:

  • 用于身份验证的 X.509 证书以及如何将它们安装在正确的位置
  • 如何提交脚本作为后台作业。
  • 处理输出(例如,通过电子邮件发送包含脚本结果的文件)。

所有这些都是另一天的工作。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯