> 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/de/sicherheit/authorization.md).

# Autorisierung

Die Benutzerautorisierung erfolgt über Rollen. Rollen können entweder über Claim-Zuordnung, ein Richtlinienskript oder durch direkte Zuweisung der Rolle an die Identität zugewiesen werden.

{% hint style="info" %}
Standardmäßig werden keine Rollen automatisch zugewiesen. Während der Ersteinrichtung wird ein lokales Administratorkonto erstellt, das zur Konfiguration der Rollenzuweisungen verwendet wird.
{% endhint %}

### Zuordnung von Rollen zu Claims

Sie können Rollen einem Claim (etwa einer Gruppenmitgliedschaft) zuordnen, indem Sie die Parameter `-ClaimType` und `-ClaimValue` von `New-PSURole` verwenden. Einstellungen sind auch im Dialog der Rolleneigenschaften unter Security \ Roles verfügbar.

<figure><img src="/files/9WZS1Lu6wsaDfcQpahu4" alt=""><figcaption><p>Zuordnung von Rollen zu Claims</p></figcaption></figure>

Wenn Sie zum Beispiel bei der Windows-Authentifizierung eine Gruppe einer Rolle zuordnen möchten, könnten Sie es so konfigurieren, dass die Gruppen-SID der Administratorrolle zugeordnet wird.

```powershell
New-PSURole -Name Administrator -ClaimType 'http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid' -ClaimValue 'S-123-123-123'
```

Rollen auf diese Weise Claims zuzuordnen ist schneller als Richtlinienskripte, da beim Anmelden des Benutzers kein PowerShell ausgeführt werden muss.

### Claim-Informationen anzeigen

Zur Unterstützung bei der Entwicklung von Richtlinienskripten oder der Zuweisung von Rollen zu Claims können Sie Claim-Informationen anzeigen, indem Sie unter Security \ Roles auf View Claim Information klicken.

<figure><img src="/files/yeb75wQNc6ueBX6I2qxB" alt=""><figcaption><p>Claim-Informationen anzeigen</p></figcaption></figure>

### Beispiel: Azure Active Directory

Sie können eine Azure Active Directory-Gruppe einer Rolle zuordnen, indem Sie die Objekt-ID der Gruppe in Azure nachschlagen. Zum Beispiel haben wir innerhalb der Domäne Ironman Software eine Gruppe namens Dashboard Administrators. Diese Gruppe hat die Objekt-ID `61849bf2-e44b-4057-b589-6cd1812d7545`.

In PowerShell Universal kann ich Benutzer dieser Gruppe der Administrator-Gruppe zuweisen, indem ich die Claim-Zuordnung einrichte. Der Claim Type ist `groups` und der Claim Value ist `61849bf2-e44b-4057-b589-6cd1812d7545`. Sobald ich den Claim zugeordnet habe, sind Benutzer der Gruppe Dashboard Administrators Teil der PowerShell Universal Administrators-Gruppe. Die resultierende `roles.ps1` sieht dann so aus.

Alle anderen Rollen sind deaktiviert.

```powershell
New-PSURole -Name Administrator -ClaimType 'groups' -ClaimValue '61849bf2-e44b-4057-b589-6cd1812d7545'
New-PSURole -Name "Operator" -Description "Operators have access to manage and execute scripts, create other entities within PowerShell Universal but cannot manage PowerShell Universal itself." -Policy {} -Disabled
New-PSURole -Name "Reader" -Description "Readers have read-only access to PowerShell Universal. They cannot make changes to any entity within the system." -Policy { } -Disabled 
New-PSURole -Name "Execute" -Description "Execute scripts within PowerShell Universal." -Policy { } -Disabled
New-PSURole -Name "User" -Description "Does not have access to the admin console but can be assigned resources like APIs, scripts, dashboards and pages." -Policy { } -Disabled
```

### Richtlinienzuweisung

Standardmäßig werden Rollen über Richtlinien zugewiesen. Richtlinien werden ausgeführt, wenn sich der Benutzer anmeldet. Sie können die Richtlinienskripte ändern, indem Sie die Seite Security / Roles aufrufen. Klicken Sie auf die Schaltfläche Edit Code, um das Richtlinienskript zu konfigurieren.

<figure><img src="/files/4fXRvZ2HCm1YUX6tR9TI" alt=""><figcaption><p>Schaltfläche zum Bearbeiten des Richtliniencodes</p></figcaption></figure>

Richtlinienskripte erhalten ein `ClaimsPrincipal`-Objekt als Parameter und müssen true oder false zurückgeben. Bei Richtlinien, die Fehler auslösen, wird von false ausgegangen. Das `ClaimsPrincipal`-Objekt enthält die Identität des Benutzers und die Claims, die der Benutzer erhalten hat. Diese können Gruppenzuweisungen oder andere Funktionen des Benutzerkontos umfassen.

Sie können ein Objekt mit dieser Struktur erwarten.

```csharp
public class ClaimsPrincipal
{
    public List<Claim> Claims { get; set; } = new List<Claim>();
    public Identity Identity { get; set; } = new Identity();
}

public class Identity 
{
    public string Name { get ;set; }
}

public class Claim 
{
    public string Type { get; set; }  
    public string Value { get; set; }
    public string ValueType { get; set; } 
    public string Issuer { get; set; }
    public Dictionary<string, string> Properties { get; set; } = new Dictionary<string, string>();
}
```

### Rollenzuweisung

Um einem Benutzer eine Rolle zuzuweisen, können Sie dessen Identität in Universal erstellen und dann die Rolle im Dropdown-Menü auf der Seite Identities auswählen.

Standardmäßig erhalten Identitäten eine Rolle über Claim-Zuordnung oder Richtlinie.

<figure><img src="/files/WpkftQwS3HCJ6wlUJ0Ma" alt=""><figcaption><p>Rollenzuweisung</p></figcaption></figure>

### Rollen importieren

Wenn die Windows-Authentifizierung aktiviert ist, können Sie auf die Schaltfläche Import Windows Groups klicken, um Gruppen auszuwählen, die Sie in PowerShell Universal importieren möchten. Nach der Auswahl dieser Gruppen werden Rollen mit Zuordnung von Rollen zu Claims erstellt, ohne dass Sie dies manuell konfigurieren müssen.

<figure><img src="/files/fEL9UIfYBYJooD595LxW" alt=""><figcaption><p>Schaltfläche Import Windows Groups</p></figcaption></figure>

### Integrierte Rollen

#### Administrator

Vollzugriff auf die gesamte PowerShell Universal-Plattform und deren Einstellungen.

#### Operator

Operatoren haben Zugriff, um Ressourcen wie APIs, Skripte und Dashboards hinzuzufügen und zu entfernen. Operatoren können keine Einstellungen wie Umgebungen, Rollen oder allgemeine Einstellungen ändern.

#### Execute

Die Rolle Execute gewährt die Möglichkeit, Skripte auszuführen, und Lesezugriff auf alles Übrige.

#### Reader

Die Rolle Reader bietet Nur-Lese-Zugriff auf PowerShell Universal.

### Standardroute pro Rolle

Sie können ändern, welche Seite der Benutzer beim Anmelden sieht, indem Sie die Eigenschaft `Default Route` für die Rolle festlegen. Zum Beispiel möchten Sie möglicherweise, dass HR-Benutzer zum Dashboard Human Resources gelangen, während IT-Benutzer zum IT Dashboard gelangen sollen.

### Benutzer mit vielen Gruppen

Wenn Ihre Benutzer Mitglieder von mehr als etwa 40 Gruppen sind, können Probleme bei der Anmeldung auftreten. Dies liegt an den Größenbeschränkungen der HTTP-Header in IIS und Kestrel. Je mehr Gruppen ein Benutzer angehört, desto mehr Autorisierungs-Claims hat er und desto größer ist der Header.

Sie können das Header-Limit für Kestrel erhöhen, indem Sie die Limits-Konfiguration in der Datei `appsettings.json` verwenden. Sie müssen die Header-Größe erhöhen. Es handelt sich um einen Wert in Bytes, der standardmäßig 32 kb beträgt.

```
{
  "Kestrel": {
    "Endpoints": {
      "HTTP": {
        "Url": "http://*:5000"
      }
    },
    "Limits": {
      "MaxRequestHeadersTotalSize": 132768
    },
    "RedirectToHttps": "false"
  },
```

### IIS-Autorisierung

Die Autorisierung in IIS funktioniert wie bei jeder anderen Methode, Sie müssen jedoch die Größenbeschränkung des Request-Headers beachten. Sie erhalten möglicherweise Fehler, wenn Sie Claims aktivieren, die viele Gruppen enthalten. Diese können das Header-Größenlimit überschreiten, und IIS gibt Fehler zurück. Wir haben festgestellt, dass etwa 40 Azure Active Directory-Gruppen dieses Problem bei einer Standard-IIS-Installation verursachen.

Der Fehler, den Sie erhalten, ist entweder ein 400-Fehler mit dem Hinweis, dass die Anfrage zu lang ist.

![](/files/7HDpyrlMAZtzU1DPfyYO)

Wenn Sie HTTPS aktiviert haben, erhalten Sie einen Fehler zu einem HTTP2-Protokollfehler.

![](/files/QNFDx3ASSpLReyBPWegy)

Sie können die IIS-Anfragegröße erhöhen, indem Sie die folgenden Registrierungsschlüssel festlegen. Sie müssen Ihren Computer neu starten, damit sie wirksam werden.

```
HKLM:\System\CurrentControlSet\Services\Http\Parameters
    MaxFieldLength: DWORD

HKLM:\System\CurrentControlSet\Services\Http\Parameters
    MaxRequestBytes: DWORD
```

Weitere Informationen finden Sie in der [Dokumentation von Microsoft](https://docs.microsoft.com/en-us/troubleshoot/iis/http-bad-request-response-kerberos#workaround-2-set-maxfieldlength-and-maxrequestbytes-registry-entries).

Als Alternative zur Erhöhung der Anfragegröße können Sie auch die Anzahl der gesendeten Gruppen reduzieren. In Azure Active Directory können Sie festlegen, dass nur die der Anwendung zugewiesenen Gruppen gesendet werden, um zu verhindern, dass alle Gruppen gesendet werden.

Gehen Sie in Azure zu **App registrations** > (Wählen Sie die App aus) > **Token Configuration** und geben Sie die der Anwendung zugewiesenen Gruppen an. ![](https://support.ironmansoftware.com/api/v1/threads/548223000001702109/inlineImages/edbsndabe757f382adbd6bf97fb8f980f999a0299e9db01c2972b353b3c8c4ffe29e6ae82d11d75341af2d224cd8f4103b9b009cb9d18e2809c18ece1c19c88900fe13e6b2866bb6604db1b7c9360f4da552d?et=17798841e64\&ha=5d1aea069a1f58d946c8dad4e93abec12ca48d705aad7500a321b0c311d7e581\&f=1.png)

Gehen Sie nun zu **Enterprise Application** > (Wählen Sie die App aus) > **Users and groups**. Weisen Sie die Gruppe(n) zu, die Sie in die Claims aufnehmen möchten. (Hinweis: Dies kann auch als Sicherheitsgrenze verwendet werden, wenn Sie im Abschnitt „Properties“ der App „User Assignment Required“ auf Yes setzen.)

![](https://support.ironmansoftware.com/api/v1/threads/548223000001702109/inlineImages/edbsndabe757f382adbd6bf97fb8f980f999a0299e9db01c2972b353b3c8c4ffe29e6ae82d11d75341af2d224cd8f4103b9b0ba101ed249f6cf46a1cf05c5cfe5650d84cedc32ef9ab20a4535665ec422da7b?et=17798841e64\&ha=0397e6316da5e7ab913c1ec8c932ba854c1a88d27c54044ea299ca2dac438aef\&f=2.png)

## App-Tokens

App-Tokens können Diensten zugewiesen werden, die sich nicht interaktiv anmelden können. Sie können Ihrem Konto ein neues App-Token gewähren, indem Sie im Tab Security / App Tokens auf die Schaltfläche Grant App Token klicken.

Das Token hat eine Gültigkeitsdauer von einem Jahr und verfügt über die für Ihr Konto gültigen Rollen. Um das App-Token in Ihr Konto zu kopieren, klicken Sie auf die Aktion Copy. Um ein App-Token zu widerrufen, klicken Sie auf die Aktion Revoke.

Sie können App-Tokens mit den Universal-Cmdlets oder direkt über Webanfragen mit Bearer-Autorisierung verwenden.

<figure><img src="/files/hz98HqBIFFrtsMk5bwVh" alt=""><figcaption><p>Seite App Tokens</p></figcaption></figure>

## Umgebung

Standardmäßig werden die Skripte für Formularauthentifizierung und Richtlinienzuweisung innerhalb des PowerShell Universal-Prozesses ausgeführt. Sie können optional eine externe [Umgebung ](https://github.com/Devolutions/docs/tree/master/translations/de/powershell-universal/environments.md)konfigurieren, um Ihre Authentifizierungs- und Autorisierungsskripte auszuführen. Wenn Sie eine Sicherheitsumgebung konfigurieren, wird ein externer PowerShell-Prozess gestartet und so konfiguriert, dass er die Einstellungen Ihrer Umgebung verwendet.

Um die vom Sicherheitsprozess verwendete Umgebung anzupassen, legen Sie `-SecurityEnvironment` in `settings.ps1` fest.

```powershell
Set-PSUSetting -SecurityEnvironment '5.1'
```

## Beispiel: Formularauthentifizierung mit Active Directory

Das folgende Beispiel zeigt die Durchführung eines einfachen „LDAP BIND“, um die Active Directory-Anmeldeinformationen eines Benutzers zu validieren. Wenn ein Benutzer, der auf PowerShell Universal zugreifen möchte, nicht der Default Admin User ist, muss er seine Anmeldeinformationen erfolgreich über einen einfachen LDAP-Bind bei Active Directory authentifizieren. Dies kann mit einer AD-Gruppenmitgliedschaftsprüfung in den Rollenrichtlinien für Admin, Operator und Reader kombiniert werden, um Active Directory-Authentifizierung UND Active Directory-Gruppenmitgliedschaft effektiv zu nutzen, um rollenbasierten Zugriff auf PowerShell Universal bereitzustellen.

```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
    $Result.UserName = 'Default Admin'
    $Result.Success = $true 
}
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."
        $Result.UserName = ($Credential.UserName)
        $Result.Success = $false 
    }
    else
    {
        write-host "Successfully authenticated with domain $($domain.name)"
        "Authentication success for $($Credential.UserName)!" | Out-File "C:\test\adlogin.txt"
        $Result.UserName = ($Credential.UserName)
        $Result.Success = $true 
    }
}

$Result
```

## Beispiel: Richtlinie basierend auf Active Directory-Gruppenmitgliedschaft (Windows-Authentifizierung)

{% hint style="info" %}
Dieses Beispiel erfordert eine Authentifizierungsmethode, die während des Authentifizierungsvorgangs Gruppeninformationen bereitstellt. Methoden wie Windows-Authentifizierung und WS-Federation können diese Informationen bereitstellen. Formularauthentifizierung funktioniert mit dieser Art von Richtlinie nicht.
{% endhint %}

Dieses Beispiel nutzt die Claims, die während der Authentifizierung bereitgestellt werden. Sie können mithilfe von Claim-Zuordnungen prüfen, ob der Benutzer eine groupsid (Gruppenmitgliedschaft) hat. Ordnen Sie den Claim-Typ groupid dem Wert zu, dem Sie die Rolle zuweisen möchten.

```powershell
$Parameters = @{
    Name = "Administrators"
    ClaimType = 'http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid'
    ClaimValue = 'S-1-5-21-22222222-111111-3333333-153'
}

New-PSURole @Parameters
```

## Beispiel: Richtlinie basierend auf Active Directory-Gruppenmitgliedschaft

In diesem Beispiel konfigurieren wir unser Administrator-Richtlinienskript so, dass es LDAP verwendet, um die Mitgliedschaft einer Active Directory-Gruppe abzurufen. Hier haben wir eine Gruppe namens „PowerShell Universal Admins“ erstellt, deren Mitgliedern Administratorzugriff in PowerShell Universal gewährt werden soll. Wir führen hier eine einfache samaccountname-Prüfung für den Benutzer durch, um sicherzustellen, dass er Mitglied der Gruppe ist. Für robustere Umgebungen wäre eine SID-/DN-/ObjectGUID-Prüfung besser geeignet.

![](/files/cZ08nWsmYF7Q3s43QtqS)

```powershell
param(
$User
)

$UserName = ($User.Identity.Name)
$UserName = $UserName.Substring($UserName.IndexOf('\')+1,($UserName.Length -($UserName.IndexOf('\')+1)))

$IsMember = $false;

# Perform LDAP Group Member Lookup
$Searcher = New-Object DirectoryServices.DirectorySearcher
$Searcher.SearchRoot = 'LDAP://CN=Users,DC=berg,DC=com' # INSERT ROOT LDAP HERE
$Searcher.Filter = "(&(objectCategory=person)(memberOf=CN=PowerShell Universal Admins,OU=Information Technology,DC=berg,DC=com))" #GROUP INSERT DN TO CHECK HERE
$Users = $Searcher.FindAll()
$Users | ForEach-Object{
    If($_.Properties.samaccountname -eq $UserName)
    {
        $IsMember = $true;
        "$UserName is a member of admin group!" | Out-File "C:\test\adgroup.txt"
    }
    else {
        "$UserName is NOT member of admin group!" | Out-File "C:\test\adgroup.txt"
    }
}

return $IsMember
```

## Beispiel: Gruppenmitgliedschaft basierend auf Azure Active Directory

Dieses Beispiel nutzt [OpenID Connect und Azure Active Directory](/powershell-universal/de/sicherheit/enterprise-security/openid-connect.md#configuring-azuread).

Sobald Sie PowerShell Universal und Azure Active Directory konfiguriert haben, können Sie Rollenskripte konfigurieren, um zu überprüfen, ob Benutzer Mitglieder von Gruppen in Azure AD sind. Sie können Claim-Zuordnungen nutzen, um von der Azure AD-Gruppen-ID auf eine PowerShell Universal-Rolle zuzuordnen.

Stellen Sie zunächst sicher, dass im Manifest Ihrer Anwendungsregistrierung Claims für die Gruppenmitgliedschaft aktiviert sind. Dies umfasst alle Gruppenmitgliedschaften, sodass diese in PowerShell Universal zugänglich sind.

![](/files/jEzBSQLY4HcKXCnZsuyD)

```
"groupMembershipClaims": "All",
```

Nach der Konfiguration können Sie Ihr Rollenskript aktualisieren, um eine Gruppenmitgliedschaft zu prüfen. Notieren Sie sich zunächst die Objekt-ID der Gruppe, die Sie in Azure AD prüfen möchten.

![](/files/fZNc3iHMVGaJxd4IxldR)

Als Nächstes können Sie in Ihrem Skript `roles.ps1` mithilfe der Claim-Zuordnung validieren, dass ein Benutzer eine bestimmte Rolle hat.

```powershell
New-PSURole -Name 'Administrators' -ClaimType 'groups' -ClaimValue '4acabc67-56cc-4590-9de6-164f3c4faf10'
```

Wenn sich Benutzer anmelden, wird ihre Gruppenmitgliedschaft anhand ihrer Claims validiert und eine Rolle zugewiesen.


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/de/sicherheit/authorization.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
