> 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/es/seguridad/authorization.md).

# Autorización

La autorización de usuarios se realiza mediante roles. Los roles se pueden asignar mediante la asignación de claims, un script de política o asignando el rol directamente a la identidad.

{% hint style="info" %}
De forma predeterminada, no se asigna ningún rol automáticamente. Durante la configuración inicial se crea una cuenta de administrador local que se utiliza para configurar las asignaciones de roles.
{% endhint %}

### Asignación de roles a claims

Puede asignar roles a un claim (como la pertenencia a un grupo) mediante los parámetros `-ClaimType` y `-ClaimValue` de `New-PSURole`. La configuración también está disponible en el cuadro de diálogo de propiedades del rol, en Security \ Roles.

<figure><img src="/files/8giGIKisD1ASVsc2rdeW" alt=""><figcaption><p>Asignación de roles a claims</p></figcaption></figure>

Por ejemplo, con la autenticación de Windows, si quisiera asignar un grupo a un rol, podría configurarlo de forma que el SID del grupo se asigne al rol de administrador.

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

Asignar roles a claims de esta manera es más rápido que los scripts de políticas, porque no requiere ejecutar PowerShell cuando el usuario inicia sesión.

### Ver información de claims

Para ayudarle a desarrollar scripts de políticas o a asignar roles a claims, puede ver la información de los claims haciendo clic en View Claim Information en Security \ Roles.

<figure><img src="/files/IqOTp6XS1HqxX4Kpnxu9" alt=""><figcaption><p>Ver información de claims</p></figcaption></figure>

### Ejemplo: Azure Active Directory

Puede asignar un grupo de Azure Active Directory a un rol buscando el Object ID del grupo en Azure. Por ejemplo, en el dominio de Ironman Software, tenemos un grupo llamado Dashboard Administrators. Este grupo tiene un ID de objeto `61849bf2-e44b-4057-b589-6cd1812d7545`.

En PowerShell Universal, puedo asignar a los usuarios de este grupo al grupo Administrator configurando la asignación de claims. El Claim Type será `groups` y el Claim Value será `61849bf2-e44b-4057-b589-6cd1812d7545`. Una vez asignado el claim, los usuarios del grupo Dashboard Administrators formarán parte del grupo Administrators de PowerShell Universal. El fichero `roles.ps1` resultante tendrá este aspecto.

Todos los demás roles están deshabilitados.

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

### Asignación mediante políticas

De forma predeterminada, los roles se asignan mediante políticas. Las políticas se ejecutan cuando el usuario inicia sesión. Puede cambiar los scripts de políticas en la página Security / Roles. Haga clic en el botón Edit Code para configurar el script de la política.

<figure><img src="/files/rC6rWoQENWiH4YEv9Sh1" alt=""><figcaption><p>Botón para editar el código de la política</p></figcaption></figure>

Los scripts de políticas reciben un objeto `ClaimsPrincipal` como parámetro y deben devolver true o false. Se asumirá que las políticas que generen errores devuelven false. El objeto `ClaimsPrincipal` contiene la identidad del usuario y los claims que el usuario ha recibido. Estos pueden incluir asignaciones de grupos u otras características de la cuenta de un usuario.

Puede esperar un objeto con esta estructura.

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

### Asignación de roles

Para asignar un rol a un usuario, puede crear su identidad en Universal y, a continuación, seleccionar el rol en la lista desplegable de la página Identities.

De forma predeterminada, las identidades reciben un rol mediante la asignación de claims o una política.

<figure><img src="/files/c0zlf5bfscQNLGnPi4WR" alt=""><figcaption><p>Asignación de roles</p></figcaption></figure>

### Importar roles

Cuando la autenticación de Windows está habilitada, puede hacer clic en el botón Import Windows Groups para seleccionar los grupos que desea importar a PowerShell Universal. Tras seleccionar estos grupos, se crearán roles, con la asignación de roles a claims, sin necesidad de configurarlo manualmente.

<figure><img src="/files/MDWFNngpW2hBhQbYhE66" alt=""><figcaption><p>Botón Import Windows Groups</p></figcaption></figure>

### Roles integrados

#### Administrator

Acceso completo a toda la plataforma PowerShell Universal y a su configuración.

#### Operator

Los operadores pueden añadir y eliminar recursos como APIs, scripts y dashboards. Los operadores no pueden cambiar ajustes como los entornos, los roles o la configuración general.

#### Execute

El rol Execute concede la capacidad de ejecutar scripts y acceso de lectura a todo lo demás.

#### Reader

El rol Reader proporciona acceso de solo lectura a PowerShell Universal.

### Ruta predeterminada por rol

Puede cambiar la página que ve el usuario al iniciar sesión estableciendo la propiedad `Default Route` del rol. Por ejemplo, puede que quiera que los usuarios de RR. HH. vayan al dashboard de Human Resources, mientras que los usuarios de TI vayan al IT Dashboard.

### Usuarios con muchos grupos

Si sus usuarios son miembros de más de unos 40 grupos, puede que experimenten problemas al iniciar sesión. Esto se debe a los límites de tamaño de los encabezados HTTP en IIS y Kestrel. Cuantos más grupos tenga un usuario, más claims de autorización tiene y mayor es el encabezado.

Puede aumentar el límite de encabezado de Kestrel mediante la configuración de límites en el fichero `appsettings.json`. Deberá aumentar el tamaño del encabezado. Es un valor en bytes y su valor predeterminado es 32 kb.

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

### Autorización en IIS

La autorización en IIS funciona igual que con cualquier otro método, pero debe tener en cuenta el límite de tamaño del encabezado de la solicitud. Puede recibir errores al habilitar claims que incluyan muchos grupos. Pueden superar el límite de tamaño del encabezado e IIS devolverá errores. Hemos comprobado que unos 40 grupos de Azure Active Directory causan este problema en una instalación predeterminada de IIS.

El error que recibirá será un error 400 indicando que la solicitud es demasiado larga.

![](/files/Way04kuDgMUyG86wvcpp)

Si tiene HTTPS habilitado, recibirá un error relativo a un error del protocolo HTTP2.

![](/files/HgrzPz4I1fOFYV2XitYI)

Puede aumentar el tamaño de solicitud de IIS estableciendo las siguientes claves de registro. Deberá reiniciar el equipo para que surtan efecto.

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

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

Puede encontrar más información en la [documentación de Microsoft](https://docs.microsoft.com/en-us/troubleshoot/iis/http-bad-request-response-kerberos#workaround-2-set-maxfieldlength-and-maxrequestbytes-registry-entries).

Como alternativa a aumentar el tamaño de la solicitud, también puede reducir el número de grupos enviados. En Azure Active Directory, puede configurarlo para que solo se envíen los grupos asignados a la aplicación y evitar que se envíen todos los grupos.

En Azure, vaya a **App registrations** > (seleccione la aplicación) > **Token Configuration** y especifique Groups assigned to the application. ![](https://support.ironmansoftware.com/api/v1/threads/548223000001702109/inlineImages/edbsndabe757f382adbd6bf97fb8f980f999a0299e9db01c2972b353b3c8c4ffe29e6ae82d11d75341af2d224cd8f4103b9b009cb9d18e2809c18ece1c19c88900fe13e6b2866bb6604db1b7c9360f4da552d?et=17798841e64\&ha=5d1aea069a1f58d946c8dad4e93abec12ca48d705aad7500a321b0c311d7e581\&f=1.png)

Ahora vaya a **Enterprise Application** > (seleccione la aplicación) > **Users and groups**. Asigne el grupo o los grupos que le interese incluir en los claims. (Nota: esto también puede utilizarse como límite de seguridad si establece “User Assignment Required” en Yes en la sección ‘Properties’ de la aplicación)

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

## App Tokens

Los App Tokens se pueden asignar a servicios que no pueden iniciar sesión de forma interactiva. Puede conceder un nuevo app token a su cuenta haciendo clic en el botón Grant App Token en la pestaña Security / App Tokens.

El token tendrá una caducidad de un año y tendrá los roles válidos para su cuenta. Para copiar el App Token en su cuenta, haga clic en la acción Copy. Para revocar un App Token, haga clic en la acción Revoke.

Puede utilizar App Tokens con los cmdlets de Universal o mediante solicitudes web directamente usando la autorización Bearer.

<figure><img src="/files/0ctQQlSYvQL0lk7jiBog" alt=""><figcaption><p>Página App Tokens</p></figcaption></figure>

## Entorno

De forma predeterminada, los scripts de autenticación por formularios y de asignación de políticas se ejecutan dentro del proceso de PowerShell Universal. Cuando configura un entorno de seguridad, se iniciará un proceso externo de PowerShell configurado para usar la configuración de su entorno.

Para ajustar el entorno utilizado por el proceso de seguridad, establezca `-SecurityEnvironment` en `settings.ps1`.

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

## Ejemplo: autenticación por formularios con Active Directory

El siguiente ejemplo muestra cómo realizar un simple "LDAP BIND" para validar las credenciales de Active Directory de un usuario. Si un usuario que intenta acceder a PowerShell Universal no es el usuario administrador predeterminado, tendrá que autenticar correctamente sus credenciales con Active Directory mediante un simple enlace LDAP. Esto se puede combinar con una comprobación de pertenencia a grupos de AD en las políticas de los roles Admin, Operator y Reader para utilizar de forma efectiva la autenticación de Active Directory Y la pertenencia a grupos de Active Directory con el fin de proporcionar acceso basado en roles 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
```

## Ejemplo: política basada en la pertenencia a grupos de Active Directory (autenticación de Windows)

{% hint style="info" %}
Este ejemplo requiere un método de autenticación que proporcione información de grupos durante el proceso de autenticación. Métodos como la autenticación de Windows y WS-Federation pueden proporcionar esta información. La autenticación por formularios no funcionará con este tipo de política.
{% endhint %}

Este ejemplo aprovecha los claims que se proporcionan durante la autenticación. Puede comprobar si el usuario tiene un groupsid (pertenencia a un grupo) mediante las asignaciones de claims. Asigne el tipo de claim groupid al valor al que quiera asignar el rol.

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

## Ejemplo: política basada en la pertenencia a grupos de Active Directory

En este ejemplo configuraremos nuestro script de política de Administrator para usar LDAP y recuperar la pertenencia a un grupo de Active Directory. Aquí hemos creado un grupo llamado "PowerShell Universal Admins" en el que los miembros del grupo deberían recibir acceso de administrador en PowerShell Universal. Aquí realizamos una simple comprobación de samaccountname del usuario para asegurarnos de que es miembro del grupo. En entornos más robustos, sería más apropiada una comprobación de SID/DN/ObjectGUID.

![](/files/3fgysHHQ3MJECOTHhAGs)

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

## Ejemplo: pertenencia a grupos basada en Azure Active Directory

Este ejemplo aprovecha [OpenID Connect y Azure Active Directory](/powershell-universal/es/seguridad/enterprise-security/openid-connect.md#configuring-azure-entra-id-azure-active-directory).

Una vez que haya configurado PowerShell Universal y Azure Active Directory, puede configurar scripts de roles para verificar si los usuarios son miembros de grupos existentes en Azure AD. Puede aprovechar las asignaciones de claims para asignar el ID de grupo de Azure AD a un rol de PowerShell Universal.

En primer lugar, asegúrese de que tiene habilitados los claims de pertenencia a grupos en el manifiesto de su registro de aplicación. Esto incluirá toda la pertenencia a grupos, por lo que estará accesible en PowerShell Universal.

![](/files/e42z56ZeVhVl1mS2FOJx)

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

Una vez configurado, puede actualizar su script de roles para comprobar la pertenencia a un grupo. Primero, tome nota del ID de objeto del grupo que quiere comprobar en Azure AD.

![](/files/8gWBtYmENyY0y9QlsN2T)

A continuación, en su script `roles.ps1`, puede validar que un usuario tiene un rol concreto mediante la asignación de claims.

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

A medida que los usuarios inicien sesión, su pertenencia a grupos se validará frente a sus claims y se les asignará un rol.


---

# 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/es/seguridad/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.
