自动部署Azure AD B2C实例的推荐方法或机制是什么?
自动配置Azure AD B2C实例的建议方法是什么,例如:策略配置,应用程序注册,甚至可能创建初始帐户?
使用场景:设置ARM模板或脚本以部署(更新)到多个环境。
提前致谢 OliverB
答案 0 :(得分:2)
是否可以使用ARM模板?如果是这样,我在哪里可以找到快速入门样本? 是否可以以编程方式进行,即使用PowerShell?如果是这样,我在哪里可以找到样品?
目前,无法以编程方式管理B2C政策。该功能目前正在开发中。如果这对您很重要,您可以对其进行投票in this Feedback Forum,以便我们可以在可用于预览时通知您。编程注册应用程序的功能请求是in this Feedback Forum。
另外,如果您想获取Azure B2C cutom Plicies的一些示例,可以参考these samples。
希望这有帮助!
答案 1 :(得分:0)
在实现 的能力之前,您只需要详细记录设置过程,逐步说明以及您可以编写的任何脚本(例如power-shell)使用graph-api注册应用程序的脚本。
将所有这些文件保存在项目中的单独模块或文件夹中,并受版本控制。
一旦可以自动化(如果有的话),这些文件就可以作为自动部署和更新模块要求的基础。
答案 2 :(得分:0)
当前无法自动创建AAD B2C租户。您可以按照本教程创建BC租户:
Tutorial: Create an Azure Active Directory B2C tenant。
自从B2C自定义策略通过GA以来,有一些新的AAD角色可以实现一些自动化:
如果要自动上传自定义策略(IEF策略),则可以:
在具有<xthml:p>Here is a paragraph that requires word wrap</p>
角色的B2C租户中创建本地用户。
创建一个B2C IEF Policy Administrator
应用注册
为先前创建的应用程序注册添加必需的权限
native
授予权限
Graph API(测试版)提供用于管理自定义策略的端点:
trustFrameworkPolicy resource type
这是我用来上传自定义策略(Access directory as the signed in user
)的脚本:
Upload-B2C-CustomPolicies.ps1
我这样执行脚本:
Param(
[string] [Parameter(Mandatory = $true)] $b2cTenantName
, [string] [Parameter(Mandatory = $true)] $graphAppId
, [string] [Parameter(Mandatory = $true)] $userName
, [string] [Parameter(Mandatory = $true)] $userPassword
, [string[]] [Parameter(Mandatory = $true)] $filePaths
)
function Get-Accesstoken {
param (
[string] [Parameter(Mandatory = $true)] $b2cTenantName
, [string] [Parameter(Mandatory = $true)] $graphAppId
, [string] [Parameter(Mandatory = $true)] $userName
, [string] [Parameter(Mandatory = $true)] $userPassword
)
$accessTokenUrl = "https://login.microsoftonline.com/$b2cTenantName.onmicrosoft.com/oauth2/token"
$body = @{
grant_type = "password"
resource = "https://graph.microsoft.com"
username = "$username"
password = "$userPassword"
client_id = "$graphAppId"
}
$response = Invoke-RestMethod `
-Uri $accessTokenUrl `
-Method Post `
-ContentType "application/x-www-form-urlencoded" `
-Body $body
return $response.access_token
}
function Set-Policy {
param (
[string] [Parameter(Mandatory = $true)] $policyUrl
, [string] [Parameter(Mandatory = $true)] $accessToken
, [string] [Parameter(Mandatory = $true)] $xml
)
$headers = @{
"Authorization" = "Bearer $accessToken";
}
Invoke-RestMethod `
-Uri $policyUrl `
-Method Put `
-Headers $headers `
-ContentType "application/xml" `
-Body $xml
}
Write-Host "Getting access token to call the graph api"
$accessToken = Get-Accesstoken -b2cTenantName $b2cTenantName -graphAppId $graphAppId -userName $userName -userPassword $userPassword
foreach ($filePath in $filePaths) {
try {
Write-Host "`nGetting file content from file path: $filePath"
$xml = Get-Content $filePath | Out-String
[xml]$xmlDoc = $xml
}
catch {
Write-Host "##vso[task.logissue type=error;]$filePath is an invalid xml file."
return
}
$policyId = $xmlDoc.TrustFrameworkPolicy.PolicyId
$policyUrl = "https://graph.microsoft.com/beta/trustframework/policies/$policyId/`$value"
Write-Host "Uploading policy with id: $policyId"
Set-Policy -policyUrl $policyUrl -accessToken $accessToken -xml $xml
}
答案 3 :(得分:0)
您现在可以使用Microsoft Graph api来管理自定义策略和策略密钥。请找到有关自定义策略API here和策略密钥here的文档。您可以找到示例here。
从今天开始,Azure AD B2C支持自定义策略的PowerShell cmdlet。
答案 4 :(得分:0)
您可以使用PowerShell AzureADPreview 2.0模块来管理自定义策略,应用程序等。虽然不像ARM模板那样完整,但是现在您可以使许多事情自动化。
完整文档在这里:AzureADPreview 2 docs
我没有成功将此模块安装到“旧” PowerShell(5.x),所以我尝试了“新” PowerShell 7(Core)。 PowerShell 7和AzureAD模块的唯一问题是Connect-AzureAD
使用的加密功能不在.NET Core中,因此您必须必须使用-UseWindowsPowerShell
选项导入AzureADPreview模块
以下是示例,可与PowerShell 7一起使用:
Install-Module AzureADPreview
Import-Module AzureADPreview -UseWindowsPowerShell
$tenantId = "yourb2ctenant.onmicrosoft.com"
# Note: this will interactively ask your credentials.
# If you want to run this unattended, use the -Credential parameter with a PSCredential object with a SecureString
Connect-AzureAD -TenantId $tenantId
# ready to go
#list your all custom policies:
Get-AzureADMSTrustFrameworkPolicy
# upload a policy:
$policyId = "B2C_1A_TrustFrameworkBase"
$policyFileName "YourTrustFrameworkBase.xml"
Set-AzureADMSTrustFrameworkPolicy -Id $policyId -InputFilePath $policyFileName
#list your all apps
Get-AzureADApplication
# examine one of you app and get ideas
$application = Get-AzureADApplication -ObjectId af46a788-8e55-4301-b2df-xxxxxxxxx
# create an application
$applicationName = "yourappname"
$application = New-AzureADApplication -DisplayName $applicationName -PublicClient $true etc