> 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/it/sicurezza/authorization.md).

# Autorizzazione

L'autorizzazione degli utenti si realizza tramite i ruoli. I ruoli possono essere assegnati tramite la mappatura delle attestazioni, uno script di criteri o assegnando il ruolo direttamente all'identità.

{% hint style="info" %}
Per impostazione predefinita non viene assegnato automaticamente alcun ruolo. Durante la configurazione iniziale viene creato un account amministratore locale, utilizzato per configurare le assegnazioni dei ruoli.
{% endhint %}

### Mappatura dei ruoli alle attestazioni

Può mappare i ruoli a un'attestazione (ad esempio l'appartenenza a un gruppo) utilizzando i parametri `-ClaimType` e `-ClaimValue` di `New-PSURole`. Le impostazioni sono disponibili anche nella finestra di dialogo delle proprietà del ruolo in Security \ Roles.

<figure><img src="/files/0LYdm5lfrSqsjsPDBRG8" alt=""><figcaption><p>Mappatura dei ruoli alle attestazioni</p></figcaption></figure>

Ad esempio, con l'autenticazione Windows, se desidera mappare un gruppo a un ruolo, può configurarlo in modo che il SID del gruppo sia mappato al ruolo amministratore.

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

La mappatura dei ruoli alle attestazioni in questo modo è più veloce degli script dei criteri perché non richiede l'esecuzione di PowerShell quando l'utente effettua l'accesso.

### Visualizzare le informazioni sulle attestazioni

Per facilitare lo sviluppo degli script dei criteri o l'assegnazione dei ruoli alle attestazioni, può visualizzare le informazioni sulle attestazioni facendo clic su View Claim Information in Security \ Roles.

<figure><img src="/files/2XN6xTBMwX1mPWrFkyWf" alt=""><figcaption><p>Visualizzazione delle informazioni sulle attestazioni</p></figcaption></figure>

### Esempio: Azure Active Directory

Può mappare un gruppo di Azure Active Directory a un ruolo cercando l'Object ID del gruppo in Azure. Ad esempio, all'interno del dominio Ironman Software, abbiamo un gruppo denominato Dashboard Administrators. Questo gruppo ha un object ID `61849bf2-e44b-4057-b589-6cd1812d7545`.

All'interno di PowerShell Universal, posso assegnare gli utenti di questo gruppo al gruppo Administrator configurando la mappatura delle attestazioni. Il Claim Type sarà `groups` e il Claim Value sarà `61849bf2-e44b-4057-b589-6cd1812d7545`. Una volta mappata l'attestazione, gli utenti del gruppo Dashboard Administrators faranno parte del gruppo PowerShell Universal Administrators. Il file `roles.ps1` risultante avrà questo aspetto.

Tutti gli altri ruoli sono disabilitati.

```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
```

### Assegnazione tramite criteri

Per impostazione predefinita, i ruoli vengono assegnati dai criteri. I criteri vengono eseguiti quando l'utente effettua l'accesso. Può modificare gli script dei criteri visitando la pagina Security / Roles. Faccia clic sul pulsante Edit Code per configurare lo script dei criteri.

<figure><img src="/files/HCK7uCgfV1gicsFRbzST" alt=""><figcaption><p>Pulsante di modifica del codice dei criteri</p></figcaption></figure>

Gli script dei criteri ricevono un oggetto `ClaimsPrincipal` come parametro e devono restituire true o false. I criteri che generano errori saranno considerati false. L'oggetto `ClaimsPrincipal` contiene l'identità dell'utente e le attestazioni che l'utente ha ricevuto. Queste possono includere assegnazioni di gruppo o altre caratteristiche dell'account di un utente.

Può aspettarsi un oggetto con questa struttura.

```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>();
}
```

### Assegnazione dei ruoli

Per assegnare un ruolo a un utente, può creare la sua identità all'interno di Universal e quindi selezionare il ruolo nell'elenco a discesa nella pagina Identities.

Per impostazione predefinita, le identità ricevono un ruolo tramite la mappatura delle attestazioni o i criteri.

<figure><img src="/files/it8RbyCasHLUwGwut9fK" alt=""><figcaption><p>Assegnazione dei ruoli</p></figcaption></figure>

### Importare i ruoli

Quando l'autenticazione Windows è abilitata, può fare clic sul pulsante Import Windows Groups per selezionare i gruppi che desidera importare in PowerShell Universal. Dopo aver selezionato questi gruppi, verranno creati i ruoli, con la mappatura dei ruoli alle attestazioni, senza doverla configurare manualmente.

<figure><img src="/files/jHk2HhNaKbLBS9Tyh80i" alt=""><figcaption><p>Pulsante Import Windows Groups</p></figcaption></figure>

### Ruoli integrati

#### Administrator

Accesso completo all'intera piattaforma PowerShell Universal e alle impostazioni.

#### Operator

Gli operatori hanno accesso per aggiungere e rimuovere risorse quali API, Script e Dashboard. Gli operatori non possono modificare impostazioni come gli ambienti, i ruoli o le impostazioni generali.

#### Execute

Il ruolo Execute concede la possibilità di eseguire script e l'accesso in lettura a tutto il resto.

#### Reader

Il ruolo Reader fornisce l'accesso in sola lettura a PowerShell Universal.

### Route predefinita per ruolo

Può modificare la pagina che l'utente vede al momento dell'accesso impostando la proprietà `Default Route` per il ruolo. Ad esempio, potrebbe volere che gli utenti delle risorse umane vadano alla dashboard Human Resources mentre gli utenti IT vadano alla IT Dashboard.

### Utenti con molti gruppi

Se i suoi utenti sono membri di più di circa 40 gruppi, potrebbe riscontrare problemi di accesso. Ciò è dovuto ai limiti di dimensione delle intestazioni HTTP in IIS e Kestrel. Più gruppi un utente ha, più attestazioni di autorizzazione possiede e più grande è l'intestazione.

Può aumentare il limite delle intestazioni per Kestrel utilizzando la configurazione dei limiti nel file `appsettings.json`. Sarà necessario aumentare la dimensione delle intestazioni. È un valore in byte e il valore predefinito è 32 kb.

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

### Autorizzazione in IIS

L'autorizzazione in IIS funziona come con qualsiasi altro metodo, ma occorre tenere presente il limite di dimensione delle intestazioni della richiesta. Potrebbe ricevere errori quando abilita attestazioni che includono molti gruppi. Possono superare il limite di dimensione delle intestazioni e IIS restituirà errori. Abbiamo riscontrato che circa 40 gruppi di Azure Active Directory causano questo problema in un'installazione IIS predefinita.

L'errore che riceverà sarà un errore 400 in cui la richiesta è troppo lunga.

![](/files/leUkG9RLtUZAYvYrBZza)

Se ha abilitato HTTPS, riceverà un errore relativo a un errore del protocollo HTTP2.

![](/files/ExK64tWEqM4QwAGXaAft)

Può aumentare la dimensione della richiesta di IIS impostando le seguenti chiavi di registro. Sarà necessario riavviare la macchina affinché abbiano effetto.

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

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

Ulteriori informazioni sono disponibili nella [documentazione di Microsoft](https://docs.microsoft.com/en-us/troubleshoot/iis/http-bad-request-response-kerberos#workaround-2-set-maxfieldlength-and-maxrequestbytes-registry-entries).

In alternativa all'aumento della dimensione della richiesta, può anche ridurre il numero di gruppi inviati. In Azure Active Directory, può impostare solo i gruppi assegnati all'applicazione per impedire l'invio di tutti i gruppi.

In Azure vada a **App registrations** > (selezioni l'app) > **Token Configuration** e specifichi i gruppi assegnati all'applicazione. ![](https://support.ironmansoftware.com/api/v1/threads/548223000001702109/inlineImages/edbsndabe757f382adbd6bf97fb8f980f999a0299e9db01c2972b353b3c8c4ffe29e6ae82d11d75341af2d224cd8f4103b9b009cb9d18e2809c18ece1c19c88900fe13e6b2866bb6604db1b7c9360f4da552d?et=17798841e64\&ha=5d1aea069a1f58d946c8dad4e93abec12ca48d705aad7500a321b0c311d7e581\&f=1.png)

Ora vada a **Enterprise Application** > (selezioni l'app) > **Users and groups**. Assegni i gruppi che desidera includere nelle attestazioni. (Nota: questo può essere utilizzato anche come confine di sicurezza se imposta “User Assignment Required” su Yes nella sezione ‘Properties’ dell'app)

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

## App Tokens

Gli App Token possono essere assegnati ai servizi che non possono effettuare l'accesso in modo interattivo. Può concedere un nuovo app token al suo account facendo clic sul pulsante Grant App Token nella scheda Security / App Tokens.

Il token avrà una scadenza di un anno e avrà i ruoli validi per il suo account. Per copiare l'App Token nel suo account, faccia clic sull'azione Copy. Per revocare un App Token, faccia clic sull'azione Revoke.

Può utilizzare gli App Token con i cmdlet di Universal o effettuando richieste web direttamente utilizzando l'autorizzazione Bearer.

<figure><img src="/files/i3juLVIvm1Qn5crRsVAI" alt=""><figcaption><p>Pagina App Tokens</p></figcaption></figure>

## Ambiente

Per impostazione predefinita, gli script di autenticazione tramite moduli e di assegnazione dei criteri vengono eseguiti all'interno del processo di PowerShell Universal. Quando configura un ambiente di sicurezza, verrà avviato un processo PowerShell esterno configurato per utilizzare le impostazioni del suo ambiente.

Per modificare l'ambiente utilizzato dal processo di sicurezza, imposti `-SecurityEnvironment` in `settings.ps1`.

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

## Esempio: autenticazione tramite moduli con Active Directory

L'esempio seguente mostra l'esecuzione di un semplice "LDAP BIND" per convalidare le credenziali Active Directory di un utente. Se un utente che tenta di accedere a PowerShell Universal non è il Default Admin User, dovrà autenticare correttamente le proprie credenziali con Active Directory tramite un semplice bind LDAP. Questo può essere combinato con un controllo di appartenenza a un gruppo AD nei criteri dei ruoli Admin, Operator e Reader per utilizzare efficacemente l'autenticazione Active Directory E l'appartenenza ai gruppi di Active Directory al fine di fornire un accesso basato sui ruoli a PowerShell Universal.

```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
```

## Esempio: criterio basato sull'appartenenza a un gruppo di Active Directory (autenticazione Windows)

{% hint style="info" %}
Questo esempio richiede un metodo di autenticazione che fornisca informazioni sui gruppi durante il processo di autenticazione. Metodi come l'autenticazione Windows e WS-Federation possono fornire queste informazioni. L'autenticazione tramite moduli non funzionerà con questo tipo di criterio.
{% endhint %}

Questo esempio sfrutta le attestazioni fornite durante l'autenticazione. Può verificare se l'utente dispone di un groupsid (appartenenza a un gruppo) utilizzando le mappature delle attestazioni. Mappi il tipo di attestazione groupid al valore a cui desidera assegnare il ruolo.

```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
```

## Esempio: criterio basato sull'appartenenza a un gruppo di Active Directory

In questo esempio configureremo lo script del criterio Administrator per utilizzare LDAP al fine di recuperare l'appartenenza a un gruppo di Active Directory. Qui abbiamo creato un gruppo denominato "PowerShell Universal Admins" i cui membri devono ricevere l'accesso Administrator in PowerShell Universal. Qui eseguiamo un semplice controllo del samaccountname dell'utente per verificare che sia membro del gruppo. Per ambienti più complessi, un controllo SID/DN/ObjectGUID sarebbe più appropriato.

![](/files/gdGBV1jPsmZvr3O17Hgs)

```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
```

## Esempio: appartenenza ai gruppi basata su Azure Active Directory

Questo esempio sfrutta [OpenID Connect e Azure Active Directory](/powershell-universal/it/sicurezza/enterprise-security/openid-connect.md#configuring-azure-entra-id-azure-active-directory).

Dopo aver configurato PowerShell Universal e Azure Active Directory, può configurare gli script dei ruoli per verificare se gli utenti sono membri dei gruppi presenti in Azure AD. Può sfruttare le mappature delle attestazioni per mappare l'ID del gruppo di Azure AD a un ruolo di PowerShell Universal.

Innanzitutto, si assicuri di aver abilitato le attestazioni di appartenenza ai gruppi nel manifest della registrazione dell'applicazione. Ciò includerà tutte le appartenenze ai gruppi, in modo che siano accessibili in PowerShell Universal.

![](/files/16oS8D1eGhm5tboBW6Qj)

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

Una volta configurato, può aggiornare lo script del ruolo per verificare l'appartenenza a un gruppo. Prima annoti l'object ID del gruppo che desidera controllare in Azure AD.

![](/files/IemeIHF6YtgvCxIZ2fx6)

Successivamente, nello script `roles.ps1`, può convalidare che un utente abbia un determinato ruolo utilizzando la mappatura delle attestazioni.

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

Quando gli utenti effettuano l'accesso, la loro appartenenza ai gruppi verrà convalidata rispetto alle loro attestazioni e verrà assegnato un ruolo.


---

# 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/it/sicurezza/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.
