public/Build-OktaApplication.ps1
function Build-OktaSpaApplication { param ( [Parameter(Mandatory)] [string] $Label, [Parameter(Mandatory)] [string[]] $RedirectUris, [Parameter(Mandatory)] [string] $LoginUri, [string[]] $PostLogoutUris, [switch] $Inactive, [string] $SignOnMode = "OPENID_CONNECT", [hashtable] $Properties, [ValidateCount(1,3)] [ValidateSet('implicit','authorization_code','refresh_token')] [string[]] $GrantTypes = @('implicit','refresh_token'), [Parameter(Mandatory)] [string] $AuthServerId, [string[]] $Scopes ) Set-StrictMode -Version Latest $ErrorActionPreference = "Stop" $appName = $Label $app = Get-OktaApplication -Query $appName if ($app) { Write-Host "Found and updating app '$($app.label)' $($app.id)" $app.settings.oauthClient.redirect_uris = $RedirectUris $app.settings.oauthClient.post_logout_redirect_uris = $PostLogoutUris $app.settings.oauthClient.grant_types = $GrantTypes $app.settings.oauthClient.initiate_login_uri = $LoginUri $app.settings.oauthClient.response_types = @() if ('implicit' -in $GrantTypes) { $app.settings.oauthClient.response_types += @('id_token', 'token') } if ('authorization_code' -in $GrantTypes) { $app.settings.oauthClient.response_types += 'code' } $app = Set-OktaApplication -Application $app } else { $app = New-OktaSpaApplication ` -Label $appName ` -RedirectUris $RedirectUris ` -LoginUri $LoginUri ` -PostLogoutUris $PostLogoutUris ` -Inactive:$Inactive ` -SignOnMode $SignOnMode ` -Properties $Properties ` -GrantTypes $GrantTypes Write-Host "Added app '$appName' $($app.id)" } # create policies to restrict scopes per app $policyName = "$($app.Label)-Policy" $policy = Get-OktaPolicy -AuthorizationServerId $AuthServerId -Query $policyName if ($policy) { Write-Host " Found '$($policyName)' Policy" } else { $policy = New-OktaPolicy -AuthorizationServerId $AuthServerId -Name $policyName -ClientIds $app.Id Write-Host " Added '$($policyName)' Policy" } if ($Scopes) { $rule = Get-OktaRule -AuthorizationServerId $AuthServerId -PolicyId $policy.id -Query "Allow $($policyName)" if ($rule) { Write-Host " Found 'Allow $($policyName)' Rule" } else { $rule = New-OktaRule -AuthorizationServerId $AuthServerId ` -Name "Allow $($policyName)" ` -PolicyId $policy.id ` -Priority 1 ` -GrantTypes $GrantTypes ` -Scopes $Scopes Write-Host " Added 'Allow $($policyName)' Rule" } } return $app } if (!(Test-Path alias:Build-OktaSpaApp)) { New-Alias -Name Build-OktaSpaApp -Value Build-OktaSpaApplication } |