Microsoft Graph PowerShell v2 发布公开预览版 - 新的身份验证方法,支持解除阻塞场景,脚本迁移工具

Posted Justin-Liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Microsoft Graph PowerShell v2 发布公开预览版 - 新的身份验证方法,支持解除阻塞场景,脚本迁移工具相关的知识,希望对你有一定的参考价值。

本篇接前一篇继续介绍,有些事情耽搁了所以发晚了。

为更多场景提供新的身份验证方法

1. 托管标识

在编写自动化脚本时,一个常见的挑战是管理用于保护服务之间通信的秘密、凭据、证书和密钥。允许模块获取受 Azure Active Directory 保护的 Azure 资源的访问令牌,从而消除管理凭据的需要。该身份由 Azure 平台管理,不需要您提供或旋转任何秘密。有关更多详细信息,请参阅 Azure 资源中的托管标识

a. 系统分配的托管标识
在服务实例上使用自动管理的标识。标识与服务实例的生命周期相关联。

Connect-MgGraph -Identity

b. 用户分配的托管标识
将用户创建的托管标识作为独立的Azure资源使用。

Connect-MgGraph -Identity -ClientId "User_Assigned_Managed_identity_Client_Id"

2. 客户端秘密凭证

如果您需要在后台进行交互,而无需用户登录,那么这种类型的授权可以帮助到你。通过向 Connect-MgGraph 添加 -ClientSecretCredential 参数,增加对客户端秘密凭证的支持。有关如何获取或创建凭证,请参阅 Get-Credential

$ClientCredential = Get-Credential -Username "Client_Id"
# Or create a credential object that is identical to the object that Get-Credential returns without prompting the user. This method requires a plain text password, which might violate the security standards in some enterprises. l
# $ClientSecretCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ApplicationId, $SecuredPassword
# Enter client_secret in the password prompt.
Connect-MgGraph -TenantId "Tenant_Id" -ClientSecretCredential $ClientCredential

3. 基于环境变量的认证

环境变量存储参数键和值,然后作为脚本的输入,并有助于在与他人共享它们时不泄漏信息。
Connect-MgGraph 中使用 -EnvironmentVariable 来支持基于环境变量的认证。需要注意的是,如果使用用户名和密码进行身份验证,将会抛出一个错误,因为设计不支持这一点,并且客户端秘密优先于证书,也就是说,如果客户端秘密值和证书值都存在,则将使用客户端秘密。查看Azure 身份环境变量以获取更多详细信息。

# Add environment variables to be used by Connect-MgGraph.
$Env:AZURE_CLIENT_ID = "application id of the client app"
$Env:AZURE_TENANT_ID = "Id of your tenant"
$Env:AZURE_CLIENT_SECRET = "secret of the client app"

# Tell Connect-MgGraph to use your environment variables.
Connect-MgGraph –EnvironmentVariable

4. 证书凭证

如果你正在使用 Microsoft Graph PowerShell SDK v2,那么仅在当前用户证书存储区中拥有证书不再是一个限制;增加了在当前用户和本地机器证书存储中查找证书的支持。如果两个地方都有两个相同的证书,则当前用户存储区将优先给予证书。

Connect-MgGraph -ClientId "Client_Id" -Tenant "Tenant" -CertificateThumbprint "Cert_Thumbprint"

连同所有新的身份验证方式,v2中使用的认证令牌凭证不再支持 -ForceRefresh。客户应该使用 Disconnect-MgGraph 来退出当前上下文,然后调用 Connect-MgGraph 来获得一个新的访问令牌。此外,为了更加安全,微软将 -AccessToken 的类型从 String 更改为 SecureString

更好的性能

HTTP/2 协议通过增加对多路复用、报头压缩和服务器推送的支持,专注于提高性能和感知延迟。当 HTTP/2 可用时,用户将受益于性能的提高,当 API 不支持 HTTP/2 时,SDK将优雅地退回到 HTTP/1.1

使用新的成功范围代码支持解除阻塞场景

API 返回的状态代码与 API 中记录的状态代码不同,这种情况将不再影响用户。通过成功状态码范围(2xx)支持,允许将所有2xx响应视为成功的请求,从而解除了新场景的阻塞,可以在脚本中进一步使用响应体时从响应体中获取信息。

Invoke-MgInstantiateApplicationTemplate -ApplicationTemplateId $applicationTemplateId -BodyParameter $params

输出:

DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
Created

Headers:
Cache-Control                 : no-cache
Transfer-Encoding             : chunked
Location                      : https://graph.microsoft.com/
Vary                          : Accept-Encoding
Strict-Transport-Security     : max-age=31536000
request-id                    : request-id
client-request-id             : client-request-id
x-ms-ags-diagnostic           : "ServerInfo":"DataCenter":"Brazil South","Slice":"E","Ring":"3","ScaleUnit":"000","RoleInstance":"CP1PEPF00002F02"
OData-Version                 : 4.0
Date                          : Fri, 16 Dec 2022 19:22:27 GMT

Body:

  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.applicationServicePrincipal",
  "application": 
    "id": "id",
    "appId": "app-id",
    "applicationTemplateId": "application-template-id",
    "createdDateTime": "2022-12-16T19:22:26Z",
    "deletedDateTime": null,
    "displayName": "Azure AD SAML Toolkit",
    "description": null,
    "groupMembershipClaims": null,
    "identifierUris": [],
    "isFallbackPublicClient": false,
  ,
  "servicePrincipal": 
    "id": "id",
    "deletedDateTime": null,
    "accountEnabled": true,
    "appId": "app-id",
    "applicationTemplateId": "application-template-id",
    "appDisplayName": "Azure AD SAML Toolkit",
    "alternativeNames": [],
    "appOwnerOrganizationId": "app-owner-organization-id",
    "displayName": "Azure AD SAML Toolkit",
    "servicePrincipalNames": [
      ""
    ],
    "servicePrincipalType": "Application",
    "tags": [
      "WindowsAzureActiveDirectoryIntegratedApp"
    ],
    "tokenEncryptionKeyId": null,
    "samlSingleSignOnSettings": null,
    "addIns": [],
    
  

注意:为了可读性,这里显示的响应对象被缩短了

脚本迁移工具

微软将提供一个迁移工具来帮助客户将他们的脚本从使用 Microsoft Graph PowerShell SDK v1 迁移到 v2。该工具将在 v2 版本GA时可用。客户可以在 GitHub 上联系微软,并发送任何愿意分享的脚本来帮助微软测试和验证工具。

以上是关于Microsoft Graph PowerShell v2 发布公开预览版 - 新的身份验证方法,支持解除阻塞场景,脚本迁移工具的主要内容,如果未能解决你的问题,请参考以下文章

创建传入用户对象的用户 (Microsoft Graph)

从 Azure Active Directory Graph 迁移到 Microsoft Graph

Microsoft Graph - 删除访问包分配

获取 Microsoft Graph API 的有效访问令牌

如何发送 Microsoft Graph 上传会话的最终字节?

Microsoft Graph 安全警报。状态问题