> 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/security.md).

# Informazioni

## Autenticazione

Per impostazione predefinita, PowerShell Universal fornisce l'[autenticazione utente locale](/powershell-universal/it/sicurezza/local-accounts.md). I nomi utente e le password crittografate sono archiviati nel database di PowerShell Universal. Per gli ambienti aziendali, potrebbe voler considerare l'utilizzo dei metodi di autenticazione supportati dalla sua organizzazione.

* [Windows SSO](/powershell-universal/it/sicurezza/enterprise-security/windows-sso.md)
* [OpenID Connect](/powershell-universal/it/sicurezza/enterprise-security/openid-connect.md)
* [SAML2](/powershell-universal/it/sicurezza/enterprise-security/saml2.md)
* [WS-Federation](/powershell-universal/it/sicurezza/enterprise-security/ws-federation.md)

## Autorizzazione

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

{% hint style="info" %}
Per impostazione predefinita, gli utenti non riceveranno alcun ruolo. In PowerShell Universal sono valide assegnazioni di ruoli multiple.
{% endhint %}

### Mappatura da ruolo ad attestazione

È possibile mappare i ruoli a un'attestazione (come 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/4gnL1LEOMDlLbPsbV3l7" alt=""><figcaption><p>Mappatura del tipo e del valore dell'attestazione</p></figcaption></figure>

Ad esempio, con l'autenticazione Windows, se volesse mappare un gruppo a un ruolo, potrebbe configurarlo in modo che il SID del gruppo venga mappato al ruolo di amministratore.

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

Mappare i ruoli alle attestazioni in questo modo è più rapido rispetto agli script dei criteri, perché non richiede l'esecuzione di PowerShell quando l'utente effettua l'accesso.

### Visualizzare le informazioni sull'attestazione

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

<figure><img src="/files/PUGM7UGQ8D3pVq6bwBdZ" alt=""><figcaption><p>Pulsante View Claim Information</p></figcaption></figure>

### Esempio: Azure Active Directory

È possibile 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 chiamato Dashboard Administrators. Questo gruppo ha un object ID pari a `61849bf2-e44b-4057-b589-6cd1812d7545`.

All'interno di PowerShell Universal, posso assegnare gli utenti di questo gruppo al gruppo Administrator configurando la mappatura dell'attestazione. 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 Administrators di PowerShell Universal. 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.

Gli script dei criteri riceveranno 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 funzionalità 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 nel menu a discesa della pagina Identities.

<figure><img src="/files/vq9Hsl3JdtjJlzLLJbet" alt=""><figcaption><p>Tabella delle identità</p></figcaption></figure>

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

<figure><img src="/files/q2L8pnXbpnkY7sHSM3j7" alt=""><figcaption><p>Modifica del ruolo dell'identità</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 come API, script e dashboard. Gli operatori non possono modificare impostazioni come ambienti, ruoli o 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 accesso in sola lettura a PowerShell Universal.

### Route predefinita per ruolo

Può modificare la pagina che l'utente vede quando effettua l'accesso impostando la proprietà `Default Route` per il ruolo. Ad esempio, potrebbe voler indirizzare gli utenti delle risorse umane alla dashboard Human Resources e gli utenti IT alla dashboard IT.

### Utenti con molti gruppi

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

Può aumentare il limite dell'intestazione per Kestrel utilizzando la configurazione dei limiti nel file `appsettings.json`. Sarà necessario aumentare la dimensione dell'intestazione. È 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 deve tenere presente il limite di dimensione dell'intestazione della richiesta. Potrebbe ricevere errori quando abilita attestazioni che includono molti gruppi. Possono superare il limite di dimensione dell'intestazione e IIS restituirà errori. Abbiamo riscontrato che circa 40 gruppi di Azure Active Directory causano questo problema in un'installazione predefinita di IIS.

L'errore che riceverà sarà un errore 400 con la richiesta troppo lunga.

![](/files/leUkG9RLtUZAYvYrBZza)

Se ha HTTPS abilitato, 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
```

Maggiori 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 evitare l'invio di tutti i gruppi.

In Azure vada a **App registrations** > (Selezioni l'app) > **Token Configuration** e specifichi Groups assigned to the application. ![](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 il gruppo o i gruppi che desidera includere nelle attestazioni. (Nota: questo può essere utilizzato anche come limite 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)

## Token dell'app

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

Il token avrà una scadenza di un anno e disporrà dei ruoli validi per il suo account. Per copiare il token dell'app nel suo account, faccia clic sull'azione Copy. Per revocare un token dell'app, faccia clic sull'azione Revoke.

Può utilizzare i token dell'app con i cmdlet di Universal oppure utilizzando direttamente richieste web con autorizzazione Bearer.

<figure><img src="/files/mjJGum07RQi1ojpPDhMz" alt=""><figcaption><p>Pagina dei token dell'app</p></figcaption></figure>

## Ambiente

Per impostazione predefinita, gli script di autenticazione basata su form e di assegnazione dei criteri vengono eseguiti all'interno del processo di PowerShell Universal. Facoltativamente, può configurare un [Ambiente ](/powershell-universal/it/config/environments.md)esterno per eseguire gli script di autenticazione e autorizzazione. 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 basata su form con Active Directory

L'esempio seguente mostra l'esecuzione di un semplice "LDAP BIND" per convalidare le credenziali di Active Directory di un utente. Se un utente che tenta di accedere a PowerShell Universal non è l'utente Default Admin, dovrà autenticare correttamente le proprie credenziali con Active Directory tramite un semplice bind LDAP. Questo può essere combinato con una verifica dell'appartenenza a un gruppo AD nei criteri dei ruoli Admin, Operator e Reader per utilizzare efficacemente l'autenticazione di Active Directory E l'appartenenza ai gruppi di Active Directory per 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 le informazioni sui gruppi durante il processo di autenticazione. Metodi come l'autenticazione Windows e WS-Federation possono fornire queste informazioni. L'autenticazione basata su form 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 e recuperare l'appartenenza a un gruppo di Active Directory. Qui abbiamo creato un gruppo chiamato "PowerShell Universal Admins" i cui membri devono ottenere l'accesso come amministratori in PowerShell Universal. Qui eseguiamo un semplice controllo del samaccountname dell'utente per assicurarci che sia membro del gruppo. Per ambienti più robusti sarebbe più appropriato un controllo di SID/DN/ObjectGUID.

![](/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 a un gruppo 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).

Una volta configurati PowerShell Universal e Azure Active Directory, può configurare gli script dei ruoli per verificare se gli utenti sono membri di 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 avere abilitato le attestazioni di appartenenza ai gruppi nel manifest della registrazione dell'applicazione. Questo 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. Innanzitutto prenda nota dell'object ID del gruppo che desidera verificare all'interno di Azure AD.

![](/files/IemeIHF6YtgvCxIZ2fx6)

Successivamente, all'interno dello script `roles.ps1`, può verificare che un utente disponga di 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/security.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.
