> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/da/sikkerhed/forms-authentication.md).

# Formulargodkendelse

Tilpas scriptet til formulargodkendelse i PowerShell Universal, så det validerer legitimationsoplysninger, angiver claims og understøtter Basic-godkendelse og Windows-logon.

{% hint style="warning" %}
Scriptet til formulargodkendelse kaldes kun, når brugere logger på via logonsiden. Hvis De bruger en anden godkendelsesmetode, kaldes dette script ikke. Scripts til rollepolitik kaldes for alle godkendelsestyper.
{% endhint %}

Som standard er scriptet til formulargodkendelse konfigureret til at acceptere brugeren Admin og en hvilken som helst adgangskode. De kan konfigurere denne godkendelsespolitik, så den interagerer med et hvilket som helst system, De ønsker. Scriptet modtager et `PSCredential`-objekt, der indeholder det brugernavn og den adgangskode, som brugeren har angivet på logonsiden.

{% hint style="info" %}
Godkendelsesindstillinger gemmes også i `authentication.ps1`
{% endhint %}

For at opdatere formulargodkendelse skal De gå til **Secure > Authentication** og derefter klikke på knappen Edit Code for formulargodkendelse.

De kan opdatere det PowerShell-script, der findes i indstillingerne, for at konfigurere, hvordan brugeren godkendes. De skal returnere et `New-PSUAuthenticationResult` fra scriptet for at angive, om brugeren blev godkendt.

```powershell
param(
    [PSCredential]$Credential
)

#
#   You can call whatever cmdlets you like to conduct authentication here.
#   Just make sure to return the $Result with the Success property set to $true
#

if ($Credential.UserName -eq 'Admin') 
{
    New-PSUAuthenticationResult -Success -UserName 'Admin'
}
else 
{
    New-PSUAuthenticationResult -ErrorMessage 'Bad username or password'
}
```

## Angivelse af en adgangskode

De kan kontrollere adgangskoden for legitimationsoplysningen ved hjælp af metoden `GetNetworkCredential()` på `PSCredential`.

```powershell
param(
    [PSCredential]$Credential
)

#
#   You can call whatever cmdlets you like to conduct authentication here.
#   Just make sure to return the $Result with the Success property set to $true
#

if ($Credential.UserName -eq 'Admin' -and $Credential.GetNetworkCredential().Password -eq 'MySuperSecretPassword') 
{
    New-PSUAuthenticationResult -Success -UserName 'Admin'
}
else 
{
    New-PSUAuthenticationResult -ErrorMessage 'Bad username or password'
}
```

## Angivelse af claims

Under formulargodkendelse kan De angive claims, som vil være tilgængelige i rollepolitikker. Det kan give en ydeevnefordel ved interaktion med fjernsystemer, fordi De kan udføre ét opslag af claims og derefter evaluere claims lokalt i stedet for at skulle foretage yderligere kald til fjernsystemet.

Dette eksempel bruger Active Directory til at slå gruppemedlemskab op og tildele dem som claims, der vil være tilgængelige i rollernes scripts.

```powershell
param(
    [PSCredential]$Credential
)

#
#   You can call whatever cmdlets you like to conduct authentication here.
#   Just make sure to return the $Result with the Success property set to $true
#

$Result = [Security.AuthenticationResult]::new()
if ($Credential.UserName -eq 'Admin') 
{
    #Maintain the out of box admin user
    New-PSUAuthenticationResult -UserName 'Admin' -Success
}
else
{
    # Get current domain using logged-on user's credentials - this validates their credential
    $CurrentDomain = "LDAP://DC=mydemodomain,DC=com"  # Insert Your Domain Here
    $domain = New-Object System.DirectoryServices.DirectoryEntry($CurrentDomain,($Credential.UserName),$Credential.GetNetworkCredential().password)

    if ($domain.name -eq $null)
    {
        "Authentication failed for $($Credential.UserName)!" | Out-File "C:\test\adlogin.txt"
        write-host "Authentication failed - please verify your username and password."
        New-PSUAuthenticationResult -UserName $Credential.UserName
    }
    else
    {
        write-host "Successfully authenticated with domain $($domain.name)"
        "Authentication success for $($Credential.UserName)!" | Out-File "C:\test\adlogin.txt"

        New-PSUAuthenticationResult -UserName $Credential.UserName -Success -Claims { 
            Get-ADPrincipalGroupMembership $Credential.UserName | Select-Object -ExpandProperty name | ForEach-Object {
                New-PSUAuthorizationClaim -Type Role -Value $_
            }
        }
    }
}
```

I Deres `roles.ps1`-fil vil De kunne bruge disse claims til at validere gruppemedlemskab.

Dette eksempel kontrollerer, om brugeren er en del af gruppen SOC\_Admins.

```powershell
param($User)

$Roles = $User.Claims | Where-Object Type -eq Role | Select-Object -ExpandProperty Value
$Roles -contains 'SOC_Admins'
```

## Variabler

Dette er de variabler, der er defineret i sikkerhedsscriptene.

| Navn             | Beskrivelse                                          | Type      |
| ---------------- | ---------------------------------------------------- | --------- |
| $Cookies         | Cookies, der er medsendt i klientens HTTP-anmodning. | hashtable |
| $Headers         | Headere, der er medsendt i klientens HTTP-anmodning. | hashtable |
| $LocalIpAddress  | Den lokale IP-adresse for anmodningen.               | string    |
| $LocalPort       | Den lokale port for anmodningen.                     | string    |
| $RemoteIpAddress | Den eksterne IP-adresse for anmodningen.             | string    |
| $RemotePort      | Fjernporten for anmodningen.                         | string    |

## Basic-godkendelse

Når De kalder API-slutpunkter eller PowerShell-administrations-API'en, kan De bruge Basic-godkendelse til at sende et brugernavn og en adgangskode. Dette kalder scriptene til formulargodkendelse og autorisation for at validere logonnet. Brugernavnet og adgangskoden skal kodes som Base64 i formatet `username:password` og sendes i Authorization-headeren med præfikset `Basic`.

```powershell
$credentials = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("admin:admin"))
Invoke-RestMethod $Env:UniversalUrl/api/v1/accessible -Headers @{
    Authorization = "Basic $credentials"
} 
```

De kan også bruge den indbyggede parameter -Credential på Invoke-RestMethod for at undgå selv at skulle indkode de grundlæggende legitimationsoplysninger. `$AdminCredential` nedenfor skal være en `PSCredential`.

```powershell
Invoke-RestMethod $Env:UniversalUrl/api/v1/accessible -Credential $AdminCredential -Authentication Basic
```

## Windows-logon

Hvis De aktiverer Native Login på metoden til formularbaseret godkendelse, forsøger PowerShell Universal at logge på den aktuelle maskine eller det aktuelle domæne med de angivne legitimationsoplysninger. Når der er logget på, indsamles brugerens grupper og leveres derefter til autorisationssystemet.

De kan konfigurere et domæne, der ikke er standard, ved at angive native-logondomænet. Hvis De ikke angiver dette domæne, bruges maskinens standarddomæne eller brugerens angivne domæne.

## Live Log

De kan bruge live-logvisningen på godkendelsessiden til at se oplysninger om scriptudførelsen. Live-logvisningen viser PowerShell-strømme.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/powershell-universal/da/sikkerhed/forms-authentication.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
