推荐的方法来自动化Azure AD B2C实例的deplyoment?

时间:2017-10-18 15:01:35

标签: azure azure-active-directory azure-ad-b2c

自动部署Azure AD B2C实例的推荐方法或机制是什么?

  • 是否可以使用ARM模板?如果是这样,我在哪里可以找到快速入门样本?
  • 是否可以以编程方式进行,即使用PowerShell?如果是这样,我在哪里可以找到样品?

自动配置Azure AD B2C实例的建议方法是什么,例如:策略配置,应用程序注册,甚至可能创建初始帐户?

  • 是否可以使用ARM模板?如果是这样,我在哪里可以找到快速入门样本?
  • 是否可以以编程方式进行,即使用PowerShell?如果是这样,我在哪里可以找到一些样品?

使用场景:设置ARM模板或脚本以部署(更新)到多个环境。

提前致谢 OliverB

5 个答案:

答案 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角色可以实现一些自动化:

enter image description here

如果要自动上传自定义策略(IEF策略),则可以:

  1. 在具有<xthml:p>Here is a paragraph that requires word wrap</p> 角色的B2C租户中创建本地用户。

  2. 创建一个B2C IEF Policy Administrator应用注册

    enter image description here

  3. 为先前创建的应用程序注册添加必需的权限

    native

    enter image description here

  4. 授予权限

    enter image description here

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。

Azure AD Preview module documentation

See medium blog

答案 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