你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure Pipelines 部署自定义策略
Azure Pipelines 支持持续集成 (CI) 以及持续交付 (CD),以持续不断地进行测试、编译并将其交付到任意目标。 本文介绍如何使用 Azure Pipelines 对 B2C (Azure AD B2C) 自定义策略的部署进程进行自动化。
重要
借助 Azure Pipelines 管理 Azure AD B2C 自定义策略目前使用 Microsoft Graph API /beta
终结点上提供的预览操作。 不支持在生产应用程序中使用这些 API。 有关详细信息,请参阅 Microsoft Graph REST API beta 版本终结点参考。
先决条件
- 完成 Active Directory B2C 中的自定义策略入门中的步骤。
- 如果你尚未创建 DevOps 组织,请按照注册、登录到 Azure DevOps 中的说明创建一个。
为管理任务注册应用程序
使用 PowerShell 脚本部署 Azure AD B2C 策略。 在 PowerShell 脚本可以与 Microsoft Graph API 交互之前,请在你的 Azure AD B2C 租户中创建应用程序注册。 如果你尚未进行这一步,请注册 Microsoft Graph 应用程序。
若要让 PowerShell 脚本访问 MS Graph 中的数据,请向已注册的应用程序授予相关应用程序权限。 在应用程序注册的“API 权限”内授予了“Microsoft Graph”>“策略”>“Policy.ReadWrite.TrustFramework”权限。
配置 Azure 存储库
注册 Microsoft Graph 应用程序后,便可以为策略文件配置存储库。
- 登录到你的 Azure DevOps 组织。
- 创建新项目,或选择现有项目。
- 在你的项目中,导航到“存储库”,然后选择“文件”。
- 选择现有存储库,或创建一个。
- 在你存储库的根目录中,创建一个名为
B2CAssets
的文件夹。 将你的 Azure AD B2C 自定义策略文件添加到“B2CAssets”文件夹。 - 在你存储库的根目录中,创建一个名为
Scripts
的文件夹。 创建一个 PowerShell 文件“DeployToB2C.ps1”。 将以下 PowerShell 脚本粘贴到“DeployToB2C.ps1”中。 - 提交并推送更改。
以下脚本从 Microsoft Entra ID 获取访问令牌。 借助令牌,该脚本将调用 MS 图形 API 来上传“B2CAssets”文件夹中的策略。 你还可以在上载之前更改策略的内容。 例如,将 tenant-name.onmicrosoft.com
替换为你的租户名称。
[Cmdletbinding()]
Param(
[Parameter(Mandatory = $true)][string]$ClientID,
[Parameter(Mandatory = $true)][string]$ClientSecret,
[Parameter(Mandatory = $true)][string]$TenantId,
[Parameter(Mandatory = $true)][string]$Folder,
[Parameter(Mandatory = $true)][string]$Files
)
try {
$body = @{grant_type = "client_credentials"; scope = "https://graph.microsoft.com/.default"; client_id = $ClientID; client_secret = $ClientSecret }
$response = Invoke-RestMethod -Uri https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token -Method Post -Body $body
$token = $response.access_token
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", 'application/xml')
$headers.Add("Authorization", 'Bearer ' + $token)
# Get the list of files to upload
$filesArray = $Files.Split(",")
Foreach ($file in $filesArray) {
$filePath = $Folder + $file.Trim()
# Check if file exists
$FileExists = Test-Path -Path $filePath -PathType Leaf
if ($FileExists) {
$policycontent = Get-Content $filePath -Encoding UTF8
# Optional: Change the content of the policy. For example, replace the tenant-name with your tenant name.
# $policycontent = $policycontent.Replace("your-tenant.onmicrosoft.com", "contoso.onmicrosoft.com")
# Get the policy name from the XML document
$match = Select-String -InputObject $policycontent -Pattern '(?<=\bPolicyId=")[^"]*'
If ($match.matches.groups.count -ge 1) {
$PolicyId = $match.matches.groups[0].value
Write-Host "Uploading the" $PolicyId "policy..."
$graphuri = 'https://graph.microsoft.com/beta/trustframework/policies/' + $PolicyId + '/$value'
$content = [System.Text.Encoding]::UTF8.GetBytes($policycontent)
$response = Invoke-RestMethod -Uri $graphuri -Method Put -Body $content -Headers $headers -ContentType "application/xml; charset=utf-8"
Write-Host "Policy" $PolicyId "uploaded successfully."
}
}
else {
$warning = "File " + $filePath + " couldn't be not found."
Write-Warning -Message $warning
}
}
}
catch {
Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
$_
$streamReader = [System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream())
$streamReader.BaseStream.Position = 0
$streamReader.DiscardBufferedData()
$errResp = $streamReader.ReadToEnd()
$streamReader.Close()
$ErrResp
exit 1
}
exit 0
配置 Azure Pipelines
存储库已初始化并使用自定义策略文件进行填充后,便可以设置发布管道。 按照以下步骤创建管道:
- 在项目中,选择“管道”>“发布”>“新建管道”。
- 在“选择模板”下,选择“空作业”,然后选择“应用”。
- 输入“阶段名称”(例如 DeployCustomPolicies),然后关闭窗格。
- 选择“添加项目”,然后在“源类型”下选择“Azure 存储库” 。
- 在“项目”这一项中选择你的项目。
- 选择包含“脚本”文件夹的“源(存储库)”。
- 选择“默认分支”,例如“master”。
- 将“默认版本”设置保留为“默认分支中的最新内容”。
- 为存储库的“源别名”。 例如,policyRepo。
- 选择“添加”
- 重命名管道以反映其意向。 例如“部署自定义策略管道”。
- 选择“保存”以保存管道配置。
配置管道变量
管道变量为你提供了一种简便方法,可以将关键数据位导入管道的各个部分。 以下变量提供有关你 Azure AD B2C 环境的信息。
名称 | 值 |
---|---|
clientId |
先前注册的应用程序的应用程序(客户端)ID。 |
clientSecret |
先前创建的客户端密码的值。 将变量类型更改为“机密”(选择锁定图标)。 |
tenantId |
your-b2c-tenant.onmicrosoft.com ,其中 your-b2c-tenant 是 Azure AD B2C 租户的名称。 |
请按照以下步骤添加管道变量:
- 在你的管道中,选择“变量”选项卡。
- 在“管道变量”下,添加上面的变量以及它们的值。
- 选择“保存”以保存变量。
添加管道任务
管道任务是一种用于执行操作的预打包脚本。 添加一个调用“DeployToB2C.ps1”PowerShell 脚本的任务。
在你创建的管道中,选择“任务”选项卡。
选择“代理作业”,然后选择加号 (+) 将任务添加到代理作业。
搜索并选择“PowerShell”。 请勿选择“Azure PowerShell”、“目标计算机上的 PowerShell”或其他 PowerShell 条目。
选择新添加的“PowerShell 脚本”任务。
为 PowerShell 脚本任务输入以下值:
任务版本:2.*
显示名称:此任务应上传的策略的名称。 例如,B2C_1A_TrustFrameworkBase。
类型:文件路径
脚本路径:选择省略号 (...),导航到 Scripts 文件夹,然后选择 DeployToB2C.ps1 文件。
参数:输入以下 PowerShell 脚本。
-ClientID $(clientId) -ClientSecret $(clientSecret) -TenantId $(tenantId) -Folder $(System.DefaultWorkingDirectory)/policyRepo/B2CAssets/ -Files "TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml,ProfileEdit.xml,PasswordReset.xml"
-Files
参数是要部署的策略文件的逗号分隔列表。 使用策略文件更新该列表。重要
确保按正确的顺序上传策略。 先是基本策略、扩展策略,然后是信赖方策略。 例如,
TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml
。
选择“保存”以保存代理作业。
测试管道
若要测试发布管道,请执行以下操作:
- 选择“管道”,然后选择“发布”。
- 选择之前创建的管道,例如 DeployCustomPolicies。
- 选择“创建发布”,然后选择“创建”以对发布进行排队 。
应该会看到一个通知横幅,指出发布已排入队列。 若要查看其状态,请在通知横幅中选择链接,或在“发布”选项卡上的列表中选择它。
后续步骤
了解有关以下方面的详细信息: