Public/Authentication/Add-KrCookiesAuthentication.ps1
<# .SYNOPSIS Adds cookie authentication to the Kestrun server. .DESCRIPTION Configures the Kestrun server to use cookie authentication for incoming requests. .PARAMETER Server The Kestrun server instance to configure. If not specified, the current server instance is used. .PARAMETER Name The name of the cookie authentication scheme. .PARAMETER Options The cookie authentication options to configure. If not specified, default options are used. .PARAMETER ClaimPolicy The claim policy configuration to apply to the authentication scheme. .PARAMETER SlidingExpiration Indicates whether the cookie expiration should be sliding. Defaults to false. .PARAMETER LoginPath The path to the login page. If not specified, defaults to "/Account/Login". .PARAMETER LogoutPath The path to the logout page. If not specified, defaults to "/Account/Logout". .PARAMETER AccessDeniedPath The path to the access denied page. If not specified, defaults to "/Account/AccessDenied". .PARAMETER ReturnUrlParameter The name of the query parameter used to return the URL after login. Defaults to "ReturnUrl". .PARAMETER ExpireTimeSpan The time span after which the cookie expires. Defaults to 14 days. .PARAMETER Cookie The cookie configuration to use. If not specified, default cookie settings are applied. .PARAMETER PassThru If specified, the cmdlet returns the modified server instance after configuration. .EXAMPLE Add-KrCookiesAuthentication -Server $myServer -Name 'MyCookieAuth' -Options $myCookieOptions -ClaimPolicy $myClaimPolicy Adds cookie authentication to the specified Kestrun server with the provided options and claim policy. .EXAMPLE Add-KrCookiesAuthentication -Name 'MyCookieAuth' -SlidingExpiration -LoginPath '/Login' -LogoutPath '/Logout' -AccessDeniedPath '/Denied' -ExpireTimeSpan (New-TimeSpan -Days 14) Configures cookie authentication with sliding expiration and custom paths for login, logout, and access denied .NOTES This cmdlet is part of the Kestrun PowerShell module and is used to configure cookie authentication for Kestrun servers. .LINK https://docs.kestrun.dev/docs/powershell/kestrun/authentication #> function Add-KrCookiesAuthentication { [KestrunRuntimeApi('Definition')] [CmdletBinding(defaultParameterSetName = 'Items')] [OutputType([Kestrun.Hosting.KestrunHost])] param( [Parameter(Mandatory = $false, ValueFromPipeline)] [Kestrun.Hosting.KestrunHost]$Server, [Parameter(Mandatory = $true)] [string]$Name, [Parameter(Mandatory = $true, ParameterSetName = 'Options')] [Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationOptions]$Options, [Parameter()] [Kestrun.Claims.ClaimPolicyConfig]$ClaimPolicy, [Parameter(ParameterSetName = 'Items')] [switch] $SlidingExpiration, [Parameter(ParameterSetName = 'Items')] [string]$LoginPath, [Parameter(ParameterSetName = 'Items')] [string]$LogoutPath, [Parameter(ParameterSetName = 'Items')] [string]$AccessDeniedPath, [Parameter(ParameterSetName = 'Items')] [string]$ReturnUrlParameter, [Parameter(ParameterSetName = 'Items')] [timespan] $ExpireTimeSpan, [Microsoft.AspNetCore.Http.CookieBuilder]$Cookie, [Parameter()] [switch]$PassThru ) process { if ($PSCmdlet.ParameterSetName -ne 'Options') { $Options = [Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationOptions]::new() if ($PSBoundParameters.ContainsKey('SlidingExpiration')) { $Options.SlidingExpiration = $SlidingExpiration.IsPresent } if ($PSBoundParameters.ContainsKey('LoginPath')) { $Options.LoginPath = $LoginPath } if ($PSBoundParameters.ContainsKey('LogoutPath')) { $Options.LogoutPath = $LogoutPath } if ($PSBoundParameters.ContainsKey('AccessDeniedPath')) { $Options.AccessDeniedPath = $AccessDeniedPath } if ($PSBoundParameters.ContainsKey('ReturnUrlParameter')) { $Options.ReturnUrlParameter = $ReturnUrlParameter } if ($PSBoundParameters.ContainsKey('ExpireTimeSpan')) { $Options.ExpireTimeSpan = $ExpireTimeSpan } if ($PSBoundParameters.ContainsKey('Cookie')) { $Options.Cookie = $Cookie } } # Ensure the server instance is resolved $Server = Resolve-KestrunServer -Server $Server [Kestrun.Hosting.KestrunHostAuthExtensions]::AddCookieAuthentication( $Server, $Name, $Options, $ClaimPolicy) | Out-Null if ($PassThru.IsPresent) { # if the PassThru switch is specified, return the server instance # Return the modified server instance return $Server } } } |