> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Aprende cómo la canalización compatible con OIDC afecta al flujo de contraseña del propietario del recurso (ROP).

# Flujo de contraseña del propietario del recurso con OIDC

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****ENMASCARADO*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

El [flujo de contraseña del propietario del recurso](/es/docs/get-started/authentication-and-authorization-flow/resource-owner-password-flow) (a veces denominado concesión de contraseña del <Tooltip tip="Propietario del recurso: entidad (como un usuario o una aplicación) capaz de otorgar acceso a un recurso protegido." cta="Ver glosario" href="/es/docs/glossary?term=Resource+Owner">propietario del recurso</Tooltip> o ROPG) es utilizado por aplicaciones de alta confianza para realizar autenticación activa. A diferencia de las concesiones de código de autorización e implícita, este mecanismo de autenticación no redirige a los usuarios a Auth0. Autentica a los usuarios con una sola solicitud, intercambiando sus credenciales de contraseña por un token.

La canalización compatible con OIDC afecta al flujo de contraseña del propietario del recurso en las siguientes áreas:

* Solicitud de autenticación
* Respuesta de autenticación
* Estructura del <Tooltip tip="ID Token: credencial destinada al propio cliente, en lugar de usarse para acceder a un recurso." cta="Ver glosario" href="/es/docs/glossary?term=ID+token">token de ID</Tooltip>
* Estructura del <Tooltip tip="Token de acceso: credencial de autorización, en forma de cadena opaca o JWT, que se usa para acceder a una API." cta="Ver glosario" href="/es/docs/glossary?term=Access+token">token de acceso</Tooltip>

<div id="authentication-request">
  ## Solicitud de autenticación
</div>

<div id="legacy">
  ### Legado
</div>

```json lines theme={null}
POST /oauth/ro HTTP 1.1
Content-Type: application/json
{
  "grant_type": "password",
  "client_id": "123",
  "username": "alice",
  "password": "A3ddj3w",
  "connection": "my-database-connection",
  "scope": "openid email favorite_color offline_access",
  "device": "my-device-name"
}
```

El parámetro `device` solo es necesario si solicita un <Tooltip tip="Token de actualización: token que se utiliza para obtener un Token de acceso renovado sin obligar a los usuarios a volver a iniciar sesión." cta="Ver glosario" href="/es/docs/glossary?term=refresh+token">token de actualización</Tooltip> al pasar el scope `offline_access`.

<div id="oidc-conformant">
  ### Compatible con OIDC
</div>

```json lines theme={null}
POST /oauth/token HTTP 1.1
Content-Type: application/x-www-form-urlencoded
grant_type=http%3A%2F%2Fauth0.com%2Foauth%2Fgrant-type%2Fpassword-realm&client_id=123&username=alice&password=A3ddj3w&realm=my-database-connection&scope=openid+email+offline_access&audience=https%3A%2F%2Fapi.example.com
```

* El endpoint para ejecutar intercambios de credenciales es `/oauth/token`.
* El tipo de concesión propio de Auth0 se usa para autenticar a usuarios desde una conexión específica (`realm`). También se admite la concesión de contraseña estándar de OIDC, pero no acepta parámetros específicos de Auth0 como `realm`.
* `favorite_color` ya no es un scope válido.
* Se elimina el parámetro `device`.
* El parámetro `audience` es opcional.

<div id="authentication-response">
  ## Respuesta de autenticación
</div>

### legado

```json lines theme={null}
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
    "access_token": "SlAV32hkKG",
    "token_type": "Bearer",
    "refresh_token": "8xLOxBtZp8",
    "expires_in": 3600,
    "id_token": "eyJ..."
}
```

* El token de acceso devuelto solo es válido para llamar al endpoint [`/userinfo`](https://auth0.com/docs/api/authentication#get-user-info).
* Solo se devolverá un Token de actualización si se pasó el parámetro `device` y se solicitó el scope `offline_access`.

### compatible con OIDC

```json lines theme={null}
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
    "access_token": "eyJ...",
    "token_type": "Bearer",
    "refresh_token": "8xLOxBtZp8",
    "expires_in": 3600,
    "id_token": "eyJ..."
}
```

* El token de acceso devuelto es válido para llamar al endpoint `/userinfo` (siempre que la API especificada por el parámetro `audience` use `RS256` como [algoritmo de firma](/es/docs/get-started/applications/signing-algorithms)) y, opcionalmente, para el <Tooltip tip="Servidor de recursos: servidor que aloja recursos protegidos. Los servidores de recursos aceptan y responden a solicitudes de recursos protegidos." cta="Ver glosario" href="/es/docs/glossary?term=resource+server">servidor de recursos</Tooltip> especificado por el parámetro `audience`.
* El ID Token se firmará obligatoriamente con `RS256` si lo solicita una aplicación pública. Para obtener más información, consulta [Aplicaciones confidenciales y públicas](/es/docs/get-started/applications/confidential-and-public-applications).
* Solo se devolverá un token de actualización si se concedió el scope `offline_access`.

<div id="id-token-structure">
  ## Estructura del ID Token
</div>

<div id="legacy">
  ### Legado
</div>

export const codeExample1 = `{
    "sub": "auth0|alice",
    "iss": "https://{yourDomain}/",
    "aud": "123",
    "exp": 1482809609,
    "iat": 1482773609,
    "email": "alice@example.com",
    "email_verified": true,
    "favorite_color": "blue"
}`;

<AuthCodeBlock children={codeExample1} language="json" filename="JSON" />

### compatible con OIDC

export const codeExample2 = `{
    "sub": "auth0|alice",
    "iss": "https://{yourDomain}/",
    "aud": "123",
    "exp": 1482809609,
    "iat": 1482773609,
    "email": "alice@example.com",
    "email_verified": true,
    "https://app.example.com/favorite_color": "blue"
}`;

<AuthCodeBlock children={codeExample2} language="json" filename="JSON" />

* El token de ID se firmará obligatoriamente con `RS256` si lo solicita una aplicación pública.
* La claim `favorite_color` debe usar un espacio de nombres y agregarse mediante una Rule. Para obtener más información, consulte [Crear claims personalizadas con espacio de nombres](/es/docs/secure/tokens/json-web-tokens/create-custom-claims).

<div id="access-token-structure-optional">
  ## Estructura del token de acceso (opcional)
</div>

### legado

```json JSON lines theme={null}
SlAV32hkKG
```

El token de acceso devuelto es opaco y solo es válido para llamar al endpoint `/userinfo`.

<div id="oidc-conformant">
  ### Compatible con OIDC
</div>

export const codeExample3 = `{
    "sub": "auth0|alice",
    "iss": "https://{yourDomain}/",
    "aud": [
        "https://api.example.com",
        "https://{yourDomain}/userinfo"
    ],
    "azp": "123",
    "exp": 1482816809,
    "iat": 1482809609,
    "scope": "openid email"
}`;

<AuthCodeBlock children={codeExample3} language="json" filename="JSON" />

* El token de acceso devuelto es un <Tooltip tip="JSON Web Token (JWT): formato estándar del ID Token (y, a menudo, del token de acceso) que se utiliza para representar claims de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=JWT">JWT</Tooltip> válido para llamar al endpoint `/userinfo` (siempre que la API especificada por el parámetro `audience` use `RS256` como <Tooltip tip="Algoritmo de firma: algoritmo que se utiliza para firmar digitalmente los tokens y garantizar que no se hayan manipulado." cta="Ver glosario" href="/es/docs/glossary?term=signing+algorithm">algoritmo de firma</Tooltip>), así como al servidor de recursos especificado por el parámetro `audience`.
* Tenga en cuenta que aún podría devolverse un token de acceso opaco si `/userinfo` es la única <Tooltip tip="Audiencia: identificador único de la audiencia de un token emitido. Se denomina aud en un token, y su valor contiene el ID de una aplicación (ID de cliente) para un ID Token o de una API (Identificador de API) para un Token de acceso." cta="Ver glosario" href="/es/docs/glossary?term=audience">audiencia</Tooltip> especificada.

<div id="standard-password-grant-requests">
  ## Solicitudes estándar de concesión de contraseña
</div>

La concesión de contraseña con `realm` de Auth0 no está definida en el estándar OIDC, pero se recomienda como alternativa al endpoint heredado de propietario de recursos, ya que admite el parámetro `realm` específico de Auth0. El [flujo estándar de OIDC también se admite](/es/docs/get-started/authentication-and-authorization-flow/resource-owner-password-flow) cuando se utiliza la autenticación OIDC.

<div id="learn-more">
  ## Más información
</div>

* [Tokens de acceso con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-access-tokens)
* [API externas con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-apis)
* [Flujo de código de autorización con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-auth-code-flow)
* [Flujo de credenciales de cliente con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-client-credentials-flow)
* [Flujo implícito con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-implicit-flow)
* [Tokens de actualización con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-refresh-tokens)
