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

# OpenID Connect

{% hint style="info" %}
OpenID Connect richiede una [licenza](https://store.devolutions.net/package#psu).
{% endhint %}

OpenID Connect è un livello di autenticazione basato su OAuth 2.0, un framework di autorizzazione. È supportato da molti fornitori e offre la possibilità di autenticarsi su sistemi come EntraID.

Questo documento illustra i passaggi necessari per configurare EntraID OpenID Connect e utilizzarlo con Universal.

## Configurazione di Azure Entra ID (Azure Active Directory)

Nel portale di Azure, si porti al blade Entra ID. Quindi, faccia clic sul nodo Enterprise Application e poi su New application.

<figure><img src="/files/dgAKmat3Y4LAhPHWER87" alt=""><figcaption></figcaption></figure>

Successivamente, faccia clic su Create your own application.

<figure><img src="/files/Y60La1pVlGYVRVMXdSvv" alt=""><figcaption></figcaption></figure>

Selezioni un nome per l'applicazione e selezioni Register an application to integrate with Microsoft Entra ID.

<figure><img src="/files/I7ufYUNO26xry17MjLXh" alt=""><figcaption></figcaption></figure>

Nella pagina Register an application, definisca un URI di reindirizzamento. Sarà l'URL del server PowerShell Universal a cui Entra ID reindirizzerà l'utente. Questo valore è definito nel file di configurazione di PowerShell Universal, `appsettings.json`.

Ora che l'applicazione è stata creata, dalla pagina Enterprise Applications, faccia clic su Single sign-on e poi su Go to application. In questo modo accederà alla pagina di registrazione dell'applicazione.

<figure><img src="/files/C78J4vbjmz2OemJaY2o4" alt=""><figcaption></figcaption></figure>

Certificates and secrets e definisca un nuovo segreto. Sarà utilizzato con il file di configurazione di PowerShell Universal.

<figure><img src="/files/Iek5jo6Ku8mvHNaz2prh" alt=""><figcaption></figcaption></figure>

Ora dovremo raccogliere diverse informazioni dall'applicazione da fornire a PowerShell Universal. Dalla home page dell'applicazione, salvi l'ID applicazione (client) e l'ID directory (tenant).

<figure><img src="/files/fodajJsC4wDTobn8BUWr" alt=""><figcaption></figcaption></figure>

### Mappatura dei claim

Per fornire i claim dei gruppi a PowerShell Universal, dovrà esporre i claim dei gruppi dalla registrazione dell'app. Faccia clic su Token Configuration e poi su Add groups claim.

<figure><img src="/files/S4pSJMMI8C4YL75aVAQC" alt=""><figcaption><p>Claim dei gruppi di Entra ID</p></figcaption></figure>

Dopo aver fatto clic su Add groups claim, avrà la possibilità di selezionare quali gruppi vengono forniti. Se seleziona All Groups, i claim dei gruppi verranno forniti a PowerShell Universal

Se seleziona Groups assigned to the application, si assicuri di selezionare il valore Emit groups as role claims. Questa impostazione richiede un piano Entra ID a pagamento.

<figure><img src="/files/QIkq7IelWcptP3lBOfF9" alt=""><figcaption><p>Impostazione Emit groups as role claims</p></figcaption></figure>

Per assegnare un gruppo alla registrazione dell'app, individui l'app in Enterprise Applications e faccia clic su User and Groups. Quindi, faccia clic su Add User\Group e selezioni i gruppi che desidera assegnare all'applicazione.

Una volta configurato il claim dei gruppi in Entra ID, potrà aggiornare le mappature dei claim di PowerShell Universal ai gruppi forniti.

Per ogni ruolo che desidera assegnare a un gruppo Entra ID, specifichi Claim Type e Claim Value per quel ruolo. Ad esempio, nel mio ambiente ho un gruppo con l'ID 446832da-d4ad-4972-b0a2-eda736129928. Il Claim Type per questo oggetto è <http://schemas.microsoft.com/ws/2008/06/identity/claims/groups>.

Per assegnarlo al gruppo di amministratori, procederei come segue.

<figure><img src="/files/l8DNGqSW6s5Yhg8Fx7wp" alt=""><figcaption><p>Mappatura dei claim</p></figcaption></figure>

Gli utenti di questo gruppo farebbero ora parte del ruolo Administrator in PowerShell Universal.

### Sovraccarichi di gruppi

Per le organizzazioni che hanno utenti con molti gruppi, è consigliabile limitare il numero di gruppi inviati a PowerShell Universal. L'invio di un numero elevato di gruppi può superare la dimensione del token e causare errori di autorizzazione. Se desidera limitare i gruppi, selezioni Groups assigned to the application.

<figure><img src="/files/LHgRHlcHz7AeswvXE2yW" alt=""><figcaption></figcaption></figure>

Per aggiungere gruppi all'applicazione, torni alla pagina dell'applicazione Enterprise e selezioni Users and groups.

<figure><img src="/files/xgnMLhU5JXRB3Ibu5oA1" alt=""><figcaption></figcaption></figure>

Faccia clic sul valore Add user/group per assegnare questi gruppi all'applicazione. Quando gli utenti accedono a PowerShell Universal, verranno forniti solo questi claim dei gruppi.

Per maggiori informazioni sui Group Overages, [faccia clic qui](https://learn.microsoft.com/en-us/security/zero-trust/develop/configure-tokens-group-claims-app-roles#group-overages).

### Configurazione di Universal per Entra ID

#### Utilizzare Appsettings.json

{% hint style="info" %}
Maggiori informazioni su `appsettings.json` nella nostra pagina [Impostazioni](/powershell-universal/it/config/settings.md).
{% endhint %}

Ora che abbiamo completato la configurazione di una registrazione app AzureAD, possiamo aggiornare il file `appsettings.json` con le impostazioni appropriate. Per la mia applicazione, avrebbe un aspetto simile a questo.

```javascript
    "OIDC": {
      "Enabled": "true",
      "CallbackPath": "/auth/signin-oidc",
      "ClientID": "<application ID>",
      "ClientSecret": "<client secret>",
      "Resource": "",
      "Authority": "https://login.microsoftonline.com/<directory ID>",
      "ResponseType": "code",
      "SaveTokens": "false",
      "GetUserInfo": false
    },
```

{% hint style="warning" %}
Se utilizza Chrome, dovrà anche abilitare HTTPS. Senza HTTPS abilitato visualizzerà un errore 500.
{% endhint %}

#### Utilizzare Authentication.ps1

Può utilizzare la console di amministrazione per configurare OpenID Connect. Consigliamo questo metodo poiché non sarà necessario riavviare il servizio PowerShell Universal dopo aver configurato OIDC.

Per aggiungere un nuovo metodo di autenticazione, vada a Security \ Authentication e aggiunga il provider OpenID Connect.

![](/files/f1kCh18el8x9Wjmu0zkY)

Una volta aggiunto il provider, può fare clic sul pulsante dei dettagli per inserire le impostazioni necessarie per l'autenticazione presso il provider OIDC. Dopo aver impostato le opzioni OIDC, imposti il provider su abilitato ed esegua la disconnessione. Quando visiterà la pagina `/admin`, le verrà richiesto l'accesso OIDC.

<figure><img src="/files/PivjvqrbmpENOYuaFrpr" alt=""><figcaption><p>Impostazioni di OpenID Connect</p></figcaption></figure>

### Token di accesso delegati

Può utilizzare i token di accesso generati da un accesso OIDC per altri servizi a cui l'utente potrebbe avere accesso. All'interno del provider OIDC, come Entra ID, può concedere autorizzazioni aggiuntive al token.

![](/files/JsYflCFrBxalQnjHlBXu)

Dovrà inoltre abilitare i token di accesso all'interno del flusso di autenticazione affinché il token fornisca l'accesso alle risorse necessarie.

![](/files/v1DMLufB0pnYxzmoY6xk)

Infine, nel file `appsettings.json` di PSU, dovrà assicurarsi che `SaveTokens` sia abilitato, che il tipo di risorsa includa token e che la risorsa a cui desidera accedere sia inclusa nell'impostazione Resource. L'URL specificato nella risorsa dovrebbe essere elencato all'interno del provider.

L'esempio seguente aggiunge una risorsa per Microsoft O365.

```javascript
    "OIDC": {
  "Enabled": "true",
  "CallbackPath": "/auth/signin-oidc",
  "ClientID": "<clientID>",
  "ClientSecret": "<clientSecret>",
  "Resource": "https://manage.office.com/",
  "Authority": "https://login.microsoftonline.com/tenant",
  "ResponseType": "id_token token",
  "SaveTokens": "true",
  "UseTokenLifetime": true
},
```

All'interno della dashboard, avrà ora accesso alle variabili `$AccessToken` e `$IdToken` che può utilizzare con i cmdlet che richiedono l'autorizzazione.

Ad esempio, il cmdlet `Connect-AzureAd` accetta un token di accesso.

```powershell
Connect-AzureAD
       [-AzureEnvironmentName <EnvironmentName>]
       [-TenantId <String>]
       -AadAccessToken <String>
       [-MsAccessToken <String>]
       -AccountId <String>
       [-LogLevel <LogLevel>]
       [-LogFilePath <String>]
       [-InformationAction <ActionPreference>]
       [-InformationVariable <String>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
```

### Token di aggiornamento

Può configurare Azure Active Directory e PowerShell Universal per fornire token di aggiornamento per richiedere nuovi token in caso di scadenza del token di accesso. A tal fine, dovrà abilitare offline\_access nella registrazione dell'app.

<figure><img src="/files/t66sV6sgVoTGN88rfwhq" alt=""><figcaption><p>offline_access</p></figcaption></figure>

Durante la configurazione di PowerShell Universal, è necessario richiedere l'ambito `offline_access`, impostare SaveTokens su true e utilizzare il tipo di risposta id\_token.

```json
"OIDC": {
    "Enabled": "true",
    "CallbackPath": "/auth/signin-oidc",
    "ClientID": "----",
    "ClientSecret": "---",
    "Resource": "https://graph.microsoft.com",
    "Authority": "https://login.microsoftonline.com/----",
    "ResponseType": "code id_token",
    "SaveTokens": "true",
    "CorrelationCookieSameSite": "",
    "UseTokenLifetime": true,
    "Scope": "openid profile groups offline_access",
    "GetUserInfo": false
},
```

Una volta configurato, può accedere alla variabile `$RefreshToken` negli script e nelle app.

## Configurazione di Okta

Okta supporta OpenID Connect. È possibile configurare un'applicazione per consentire l'autenticazione sulle istanze di PowerShell Universal.

Nella console di amministrazione di Okta, espanda Applications e faccia clic su Applications. Quindi faccia clic su Create App Integration.

![](/files/NJdk1JI8fZcQDIQIcdHZ)

Selezioni OIDC e Web Application.

![](/files/Sco8lFthwSwwlwALN8lZ)

Assegni un nome all'applicazione e definisca l'URL di reindirizzamento Sign-In utilizzato per chiamare il server PowerShell Universal. Dovrà specificare questo URL di callback nella configurazione di PowerShell Universal.

![](/files/UJkshxNFkCaievdEBxwn)

Una volta creata l'applicazione, prenda nota del Client ID e del Client Secret. Li specificherà nella configurazione di PowerShell Universal.

![](/files/MACcOD1whvbQQYZI52MN)

Nella scheda Sign On, specifichi il filtro dei claim dei gruppi da utilizzare per fornire i claim a PowerShell Universal. Questi claim possono essere utilizzati per assegnare ruoli in base all'appartenenza ai gruppi. Il filtro seguente restituisce tutti i claim.

![](/files/cyPsWLgkq3Pm0SSJCg8u)

Una volta configurata l'applicazione, può configurare PowerShell Universal.

### Configurazione di Universal per Okta

Una volta definita l'applicazione Okta, può impostare il file `appsettings.json` in modo da utilizzare il provider per gli accessi. Di seguito è riportato un esempio della sezione necessaria per il funzionamento di Okta. Presti attenzione alla funzionalità di ambito, poiché è necessaria per recuperare l'appartenenza ai gruppi.

```json
    "OIDC": {
      "Enabled": "true",
      "CallbackPath": "/authorization-code/callback",
      "ClientID": "6f006906-643a-40fe-af00-9060cea5d6ef",
      "ClientSecret": "M~.rE56.md_MOpB2I5kwj_voFuX-i891N0",
      "Resource": "",
      "Authority": "https://poshtools.okta.com",
      "ResponseType": "code",
      "SaveTokens": "true",
      "CorrelationCookieSameSite": "",
      "UseTokenLifetime": true,
      "Scope": "openid profile groups",
      "GetUserInfo": true
    },
```

### Accesso basato sui ruoli

Per cercare l'appartenenza ai gruppi per Okta, dovrà utilizzare la variabile `$UserInfo` disponibile in `roles.ps1`. Questa variabile fornisce informazioni aggiuntive sull'utente che effettua l'accesso.

La proprietà groups conterrà un elenco dei gruppi di cui l'utente è membro. Può convalidare l'appartenenza verificando se l'elenco contiene il gruppo desiderato.

```powershell
param($User)

$UserInfo.groups -contains 'Administrators'
```

### Token di accesso delegati

I token di accesso sono disponibili per gli utenti all'interno dei loro script. Può utilizzare i token di accesso nei job avviati dagli utenti e nelle dashboard.

Ad esempio, potrebbe restituire le informazioni dell'utente corrente utilizzando il token di accesso fornito da Okta.

```powershell
Invoke-RestMethod https://poshtools.okta.com/oauth2/v1/userinfo -Headers @{
    Authorization = "Bearer $AccessToken"
}
```

## Visualizzazione delle informazioni sui claim

Se non è sicuro di quali informazioni sui claim vengano inviate a PowerShell Universal dal provider di identità, può utilizzare il pulsante View Claim Information nella pagina Security \ Roles per visualizzare tutti i ruoli forniti a PSU dal sistema remoto.


---

# 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/enterprise-security/openid-connect.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.
