Functions/Authentication/Add-PASOAuthProvider.ps1

# .ExternalHelp psPAS-help.xml
function Add-PASOAuthProvider {
    [CmdletBinding(SupportsShouldProcess)]
    param(
        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateLength(1, 50)]
        [ValidatePattern('^[a-zA-Z0-9]+$')]
        [string]$id,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateSet(1, 2)]
        [int]$accessTokenValidationMode,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateLength(0, 2048)]
        [string]$introspectionUrl,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateLength(0, 2048)]
        [string]$issuerUrl,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateLength(0, 8192)]
        [string]$publicKey,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateSet(1, 2)]
        [int]$signatureValidationMode,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [psobject[]]$allowedUsers,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateLength(0, 2048)]
        [string]$audience,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateLength(0, 2048)]
        [string]$jwksUrl,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [psobject]$clientCredentials,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateLength(0, 32)]
        [string]$clientIdClaimType
    )

    begin {

        Assert-VersionRequirement -SelfHosted
        Assert-VersionRequirement -RequiredVersion 15.0

    }#begin

    process {

        #Create URL for request
        $URI = "$($psPASSession.BaseURI)/api/Configuration/OAuth/Providers"

        #Get request parameters
        $boundParameters = $PSBoundParameters | Get-PASParameter

        #Create body of request
        #Send as raw UTF8 bytes rather than a String so ParameterBinding/module logging of this
        #call records a non-revealing type name instead of the literal request content.
        $body = [System.Text.Encoding]::UTF8.GetBytes($($boundParameters | ConvertTo-Json -Depth 5))

        #send request to web service
        if ($PSCmdlet.ShouldProcess($id, 'Add OAuth Provider')) {

            $result = Invoke-PASRestMethod -Uri $URI -Method POST -Body $body

        }

        if ($null -ne $result) {

            $result | Add-ObjectDetail -TypeName psPAS.CyberArk.Vault.OAuthProvider

        }

    }#process

    end { }#end

}