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 上联系微软,并发送任何愿意分享的脚本来帮助微软测试和验证工具。