keycloakTokenManager.psm1
function Connect-KTM { <# .SYNOPSIS Inititalize Keycloak Token Manager. .DESCRIPTION Inititalize Keycloak Token Manager. .PARAMETER userName Specifies the keycloak user name. .PARAMETER password Specifies the keycloak user password as securestring. .PARAMETER realmUri Specifies the keycloak realm uri to which you want to connect to. .PARAMETER clientName Specifies the keycloak client name. .PARAMETER clientSecret Specifies the keycloak client secret. .INPUTS None. .OUTPUTS KeycloakTokenManager object. .EXAMPLE PS> $securePassword = ConvertTo-SecureString -String "mypassword" -As PlainText -Force PS> $ktm = Connect-KTM -realmUri https://keycloak.example.com/realms/myrealm ` -userName myuser ` -password $securePassword .EXAMPLE PS> $securePassword = ConvertTo-SecureString -String "mypassword" -As PlainText -Force PS> $ktm = Connect-KTM -realmUri https://keycloak.example.com/realms/myrealm ` -userName myuser ` -password $securePassword ` -clientName myclient .EXAMPLE PS> $securePassword = ConvertTo-SecureString -String "mypassword" -As PlainText -Force PS> $ktm = Connect-KTM -realmUri https://keycloak.example.com/realms/myrealm ` -userName myuser ` -password $securePassword ` -clientName myclient ` -clientSecret <SUPER_SECRET_STRING> .EXAMPLE PS> $securePassword = ConvertTo-SecureString -String "mypassword" -As PlainText -Force PS> $ktm = Connect-KTM -realmUri https://keycloak.example.com/realms/myrealm ` -clientName myclient .LINK https://www.powershellgallery.com/packages/keycloakTokenManager #> [OutputType([KeycloakTokenManager])] [CmdletBinding()] param ( [Parameter(Mandatory = $false, HelpMessage = 'username')] [string]$userName, [Parameter(Mandatory = $false, HelpMessage = 'userpassword as securestring')] [securestring]$password, [Parameter(Mandatory = $true, HelpMessage = 'Keycloak realm url')] [uri]$realmUri, [Parameter(Mandatory = $false, HelpMessage = 'Keycloak client name')] [string]$clientName, [Parameter(Mandatory = $false, HelpMessage = 'Keycloak client secret')] [string]$clientSecret ) switch ([string]::IsNullOrEmpty($userName)) { $false { switch ([string]::IsNullOrEmpty($clientName)) { $false { switch ([string]::IsNullOrEmpty($clientSecret)) { $false { [KeycloakTokenManager]::new([string]$userName, [securestring]$password, [uri]$realmUri, [string]$clientName, [string]$clientSecret) } $true { [KeycloakTokenManager]::new([string]$userName, [securestring]$password, [uri]$realmUri, [string]$clientName) } } } $true { [KeycloakTokenManager]::new([string]$userName, [securestring]$password, [uri]$realmUri) } } } $true { switch ([string]::IsNullOrEmpty($clientName)) { $false { [KeycloakTokenManager]::new([uri]$realmUri, [string]$clientName) } $true { throw "Keycloak client name is missing or empty" } } } } } function Get-KTMAccessToken { <# .SYNOPSIS Get Keycloak Access Token. .DESCRIPTION Get Keycloak Access Token. .PARAMETER KeycloakTokenManager Specifies the keycloak token manager to be used. Use Connect-KTM to get a KeycloakTokenManager instance. .PARAMETER userName Specifies the keycloak user name for which you want to get the token. If you use a different user name than during initialization of Keycloak Token Manager, make sure that the initial user has the impersonation realm management role. If no user name is specified, the initial user name will be used. .INPUTS None. .OUTPUTS System.string. .EXAMPLE PS> $accessToken = Get-KTMAccessToken -KeycloakTokenManager $ktm .EXAMPLE PS> $accessToken = Get-KTMAccessToken -KeycloakTokenManager $ktm -userName "otherUserName" .LINK https://www.powershellgallery.com/packages/keycloakTokenManager #> [OutputType([string])] [CmdletBinding()] param ( [Parameter(Mandatory = $false)] [KeycloakTokenManager]$userName, [Parameter(Mandatory = $true)] [KeycloakTokenManager]$KeycloakTokenManager ) switch ([string]::IsNullOrEmpty($userName)) { $false { $KeycloakTokenManager.getAccessToken($userName) } Default { $KeycloakTokenManager.getAccessToken() } } } function Get-KTMHeader { <# .SYNOPSIS Get HTTP request header with authorization. .DESCRIPTION Get HTTP request header with authorization. .PARAMETER KeycloakTokenManager Specifies the keycloak token manager to be used. Use Connect-KTM to get a KeycloakTokenManager instance. .PARAMETER userName Specifies the keycloak user name for which you want to get the request header. If you use a different user name than during initialization of Keycloak Token Manager, make sure that the initial user has the impersonation realm management role. If no user name is specified, the initial user name will be used. .INPUTS None. .OUTPUTS System.Collections.Generic.Dictionary[[String], [String]]. .EXAMPLE PS> $header = Get-KTMHeader -KeycloakTokenManager $ktm .EXAMPLE PS> $accessToken = Get-KTMHeader -KeycloakTokenManager $ktm -userName "otherUserName" .LINK https://www.powershellgallery.com/packages/keycloakTokenManager #> [OutputType([System.Collections.Generic.Dictionary[[String], [String]]])] [CmdletBinding()] param ( [Parameter(Mandatory = $false)] [KeycloakTokenManager]$userName, [Parameter(Mandatory = $true)] [KeycloakTokenManager]$KeycloakTokenManager ) switch ([string]::IsNullOrEmpty($userName)) { $false { $KeycloakTokenManager.getHeader($userName) } Default { $KeycloakTokenManager.getHeader() } } } function Close-KTM { <# .SYNOPSIS Logout given keycloak user session. .DESCRIPTION Logout given keycloak user session. .PARAMETER KeycloakTokenManager Specifies the keycloak token manager to be used. Use Connect-KTM to get a KeycloakTokenManager instance. .PARAMETER userName Specifies the keycloak user name for which you want to close the session and logout. If you use a different user name than during initialization of Keycloak Token Manager, make sure that the initial user has the impersonation realm management role. If no user name is specified, the initial user name will be used. .INPUTS None. .OUTPUTS System.bool. .EXAMPLE PS> $result = Close-KTM -KeycloakTokenManager $ktm .EXAMPLE PS> $result = Close-KTM -KeycloakTokenManager $ktm -userName "otherUserName" .LINK https://www.powershellgallery.com/packages/keycloakTokenManager #> [OutputType([bool])] [CmdletBinding()] param ( [Parameter(Mandatory = $false)] [KeycloakTokenManager]$userName, [Parameter(Mandatory = $true)] [KeycloakTokenManager]$KeycloakTokenManager ) switch ([string]::IsNullOrEmpty($userName)) { $false { $KeycloakTokenManager.logout($userName) } Default { $KeycloakTokenManager.logout() } } } function Disconnect-KTM { <# .SYNOPSIS Disposes keycloak token manager object and logsout all associated user sessions. .DESCRIPTION Disposes keycloak token manager object and logsout all associated user sessions. .PARAMETER KeycloakTokenManager Specifies the keycloak token manager to be used. Use Connect-KTM to get a KeycloakTokenManager instance. .INPUTS None. .EXAMPLE PS> Disconnect-KTM -KeycloakTokenManager $ktm .LINK https://www.powershellgallery.com/packages/keycloakTokenManager #> [OutputType([void])] [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [KeycloakTokenManager]$KeycloakTokenManager ) $KeycloakTokenManager.dispose() } Export-ModuleMember -Function Connect-KTM Export-ModuleMember -Function Get-KTMAccessToken Export-ModuleMember -Function Get-KTMHeader Export-ModuleMember -Function Close-KTM Export-ModuleMember -Function Disconnect-KTM |