Compartir a través de


Definición de un perfil técnico de OAuth2 en una directiva personalizada de Azure Active Directory B2C

Importante

A partir del 1 de mayo de 2025, Azure AD B2C ya no estará disponible para la compra por parte de nuevos clientes. Obtenga más información en nuestras preguntas más frecuentes.

Nota:

En Azure Active Directory B2C, las directivas personalizadas se han diseñado principalmente para abordar escenarios complejos. Para la mayoría de los escenarios, se recomienda usar flujos de usuario integrados. Si no lo ha hecho, obtenga información sobre el paquete de inicio de directivas personalizadas en Introducción a las directivas personalizadas en Active Directory B2C.

Azure Active Directory B2C (Azure AD B2C) proporciona compatibilidad con el proveedor de identidades del protocolo OAuth2. OAuth2 es el protocolo principal para la autorización y la autenticación delegada. Para obtener más información, consulte rfC 6749 The OAuth 2.0 Authorization Framework (El marco de autorización de OAuth 2.0). Con un perfil técnico de OAuth2, puede federarse con un proveedor de identidades basado en OAuth2, como Facebook. La federación con un proveedor de identidades permite a los usuarios iniciar sesión con sus identidades sociales o empresariales existentes.

Protocolo

El atributo Name del elemento Protocol tiene que establecerse en OAuth2. Por ejemplo, el protocolo para el perfil técnico facebook-OAUTH es OAuth2:

<TechnicalProfile Id="Facebook-OAUTH">
  <DisplayName>Facebook</DisplayName>
  <Protocol Name="OAuth2" />
  ...

Notificaciones de entrada

Los elementos InputClaims y InputClaimsTransformations no son necesarios. Pero es posible que quiera enviar más parámetros al proveedor de identidades. En el ejemplo siguiente se agrega el parámetro de cadena de consulta domain_hint con el valor de a la solicitud de contoso.com autorización.

<InputClaims>
  <InputClaim ClaimTypeReferenceId="domain_hint" DefaultValue="contoso.com" />
</InputClaims>

Notificaciones de salida

El elemento OutputClaims contiene una lista de notificaciones devueltas por el proveedor de identidades de OAuth2. Puede que tenga que asignar el nombre de la notificación definida en la directiva al nombre definido en el proveedor de identidades. También puede incluir notificaciones no especificadas por el proveedor de identidades, siempre que establezca el atributo DefaultValue.

El elemento OutputClaimsTransformations puede contener una colección de elementos OutputClaimsTransformation que se usan para modificar las notificaciones de salida o para generar nuevas.

En el ejemplo siguiente se muestran las notificaciones devueltas por el proveedor de identidades de Facebook:

  • El atributo first_name se asigna al atributo givenName .
  • La reclamación last_name se asigna a la reclamación apellido.
  • Notificación displayName sin asignación de nombres.
  • La notificación email sin asignación de nombre.

El perfil técnico también muestra la notificaciones no proporcionadas por el proveedor de identidades:

  • La notificación identityProvider que contiene el nombre del proveedor de identidades.
  • La notificación authenticationSource con un valor predeterminado de socialIdpAuthentication.
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="id" />
  <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
  <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="facebook.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>

Metadatos del punto de conexión de autorización

El flujo de autorización comienza cuando Azure AD B2C dirige al usuario al punto de conexión de proveedores /authorize de identidades de OAuth2. La llamada al punto de conexión de autorización es la parte interactiva del flujo, donde el usuario realiza la acción. En este momento, se pide al usuario que complete el inicio de sesión en el proveedor de identidades de OAuth2. Por ejemplo, escribiendo su nombre de usuario y contraseña.

Azure AD B2C crea una solicitud de autorización proporcionando el identificador de cliente, los ámbitos, el URI de redirección y otros parámetros que necesita para adquirir un token de acceso del proveedor de identidades. En esta sección se describen los metadatos del punto de conexión de autorización, que permite configurar la solicitud al /authorize punto de conexión del proveedor de identidades.

La solicitud al punto de conexión de autorización siempre es HTTP GET. En el ejemplo siguiente se muestra una llamada al punto de conexión de autorización.

GET https://login.contoso.com/oauth/v2/authorization?
client_id=12345
&response_type=code
&response_mode=query
&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
&scope=profile%20offline_access
&redirect_uri=https%3a%2f%2fabrikam.b2clogin.com%2fabrikam.onmicrosoft.com%2foauth2%2fauthresp
&state=...

En la tabla siguiente se enumeran los metadatos del punto de conexión de autorización.

Atributo Obligatorio Descripción
authorization_endpoint Dirección URL del punto de conexión de autorización según RFC 6749.
client_id Identificador de aplicación del proveedor de identidades.
AdditionalRequestQueryParameters No Parámetros de consulta de solicitud adicionales. Por ejemplo, puede que desee enviar parámetros adicionales al proveedor de identidades. Puede incluir varios parámetros mediante el delimitador de comas.
response_mode No Método que usa el proveedor de identidades para devolver el resultado a Azure AD B2C. Valores posibles: query, form_post (valor predeterminado) o fragment.
scope No Ámbito de la solicitud definida según la especificación del proveedor de identidades de OAuth2. Por ejemplo openid, , profiley email.
UsePolicyInRedirectUri No Indica si se debe usar una directiva al construir el URI de redirección. Al configurar la aplicación en el proveedor de identidades, debe especificar el URI de redirección. El URI de redirección apunta a Azure AD B2C, https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp. Si especifica true, debe agregar un URI de redirección para cada directiva que use. Por ejemplo: https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/{policy-name}/oauth2/authresp.

Metadatos del punto de conexión del token

Una vez que el usuario complete su autenticación en el punto de conexión de autorización del proveedor de identidades, se devuelve una respuesta que contiene la autorización code a Azure AD B2C. Azure AD B2C canjea el código de autorización de un token de acceso mediante el envío de una solicitud POST al /token punto de conexión del proveedor de identidades. En esta sección se describen los metadatos del punto de conexión del token, que permite configurar la solicitud al /token punto de conexión del proveedor de identidades.

La siguiente solicitud HTTP muestra una llamada de Azure AD B2C al punto de conexión del token del proveedor de identidades.

POST https://contoso/oauth2/token 
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=12345&scope=profile offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq... 

En la tabla siguiente se enumeran los metadatos del punto de conexión del token.

Atributo Obligatorio Descripción
AccessTokenEndpoint Dirección URL del punto de conexión del token. Por ejemplo: https://www.linkedin.com/oauth/v2/accessToken.
HttpBinding No Enlace HTTP esperado al punto de conexión del token. Valores posibles: GET o POST.
AccessTokenResponseFormat No Formato de la llamada al punto de conexión del token de acceso. Por ejemplo, Facebook requiere un método HTTP GET, pero la respuesta del token de acceso está en formato JSON. Valores posibles: Default, Jsony JsonP.
ExtraParamsInAccessTokenEndpointResponse No Contiene los parámetros adicionales que algunos proveedores de identidades pueden devolver en la respuesta de AccessTokenEndpoint . Por ejemplo, la respuesta de AccessTokenEndpoint contiene un parámetro adicional, como openid, que es un parámetro obligatorio además del access_token en una cadena de consulta de solicitud ClaimsEndpoint . Se deben escapar varios nombres de parámetro y separarse por el delimitador de comas ','.
token_endpoint_auth_method No Especifica cómo Azure AD B2C envía el encabezado de autenticación al punto de conexión del token. Valores posibles: client_secret_post (valor predeterminado) y client_secret_basic, private_key_jwt. Para más información, consulte la sección Autenticación de cliente de OpenID Connect.
token_signing_algorithm No Especifica el algoritmo de firma que se va a usar cuando token_endpoint_auth_method se establece en private_key_jwt. Valores posibles: RS256 (predeterminado) o RS512.

Configuración del método de enlace HTTP

De forma predeterminada, la solicitud al punto de conexión del token usa HTTP POST.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">POST</Item>

La siguiente llamada HTTP muestra una llamada al punto de conexión del token mediante la solicitud HTTP POST:

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Para los proveedores de identidades que requieren el uso del método HTTP GET en el /token punto de conexión, establezca los HttpBinding metadatos GETen . Tenga en cuenta que, en el ejemplo siguiente, AccessTokenResponseFormat se establece jsonen , ya que el punto de conexión del token devuelve la respuesta en formato JSON.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>
GET /oauth2/token?client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Configuración del formato de respuesta del token de acceso

En el caso de los proveedores de identidades que admiten el método HTTP POST, se AccessTokenResponseFormat establece de forma predeterminada jsonen . Si el proveedor de identidades admite la solicitud HTTP GET, debe establecer el formato de respuesta del token de acceso en json explícitamente.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>

En el ejemplo siguiente se muestra una respuesta de punto de conexión de token en formato JSON:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1637924390,
    "expires_in": 960000,
}

Configuración del método de autenticación

Las solicitudes al punto de conexión del token siempre requieren autenticación. De forma predeterminada, Azure AD B2C proporciona al proveedor de identidades credenciales de cliente. De forma predeterminada, el método de autenticación es client_secret_post, incluidas las credenciales de cliente (client_id y client_secret) en el cuerpo de la solicitud.

La siguiente solicitud HTTP al punto de conexión del token contiene y client_id en client_secret los datos POST. Para las solicitudes client_id GET y client_secret se incluyen en los parámetros de cadena de consulta.

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Para los proveedores de identidades que requieren el uso de la autenticación básica HTTP en su /token punto de conexión, configure los token_endpoint_auth_method metadatos en client_secret_basic. Con este tipo de método de autenticación, las credenciales de cliente se pasan al proveedor de identidades mediante el esquema de autenticación HTTP Basic.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">client_secret_basic</Item>

La siguiente solicitud HTTP muestra una llamada al punto de conexión del token con autenticación básica HTTP. El encabezado de autorización contiene el identificador de cliente y el secreto de cliente, con el formato client_ID:client_secret, codificado en base64.

POST /oauth2/token

Authorization: Basic YWJjZDoxMjM0

redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Para los proveedores de identidades que admiten la autenticación JWT de clave privada, configure los token_endpoint_auth_method metadatos en private_key_jwt. Con este tipo de método de autenticación, el certificado proporcionado a Azure AD B2C se usa para generar una aserción firmada, que se pasa al proveedor de identidades a través del client_assertion parámetro . Establecido client_assertion_type en urn:ietf:params:oauth:client-assertion-type:jwt-bearer. Los token_signing_algorithm metadatos especifican el algoritmo de firma del JWT.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">private_key_jwt</Item>
<Item Key="token_signing_algorithm">RS256</Item>

La siguiente solicitud HTTP muestra una llamada al punto de conexión del token mediante la autenticación JWT de clave privada.

POST /oauth2/token

client_assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6IjJFRFg0dWRYeDIxbXNoaXdJVzczMUY3OUZSbFJiUDZXVXJyZmktR1RFeVkifQ.eyJpc3MiOiJhYmNkIiwiZXhwIjoxNjM3OTI5ODY0LCJuYmYiOjE2Mzc5Mjk1NjQsImF1ZCI6Imh0dHBzOi8vNWRlNC0xMDktNjQtMTI0LTUzLm5ncm9rLmlvL2FjY2Vzc190b2tlbiIsImp0aSI6IjVxQWlGV2lEODNDbU1KWWNrejBRdGc9PSIsInN1YiI6ImFiY2QiLCJpYXQiOjE2Mzc5Mjk1NjR9.C4OtRnrLaQatpT5LP45O5Nb418S4v8yZi_C42ld440w&client_id=abcd&client_assertion_type=urn%3aietf%3aparams%3aoauth%3aclient-assertion-type%3ajwt-bearer&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Metadatos del punto de conexión de información de usuario

Después de que Azure AD B2C obtenga el token de acceso del proveedor de identidades de OAuth2, realiza una llamada al punto de conexión de información de usuario. El punto de conexión de información de usuario, también conocido como punto de conexión de notificaciones, está diseñado para recuperar notificaciones sobre el usuario autenticado. Azure AD B2C usa la autenticación de token de portador para autenticarse en el punto de conexión de información de usuario de proveedores de identidades. El token de portador es el token de acceso que Azure AD B2C obtiene del punto de conexión de proveedores de identidades /token .

La solicitud al punto de conexión de información de usuario siempre es HTTP GET. El token de acceso se envía en un parámetro de cadena de consulta denominado access_token. La siguiente solicitud HTTP muestra una llamada al punto de conexión de información de usuario con el token de acceso en el parámetro de cadena de consulta.

GET /oauth2/claims?access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5... 

En la tabla siguiente se enumeran los metadatos del punto de conexión de información de usuario.

Atributo Obligatorio Descripción
ClaimsEndpoint La dirección URL del punto de conexión de la información de usuario. Por ejemplo: https://api.linkedin.com/v2/me.
ClaimsEndpointAccessTokenName No Nombre del parámetro de cadena de consulta del token de acceso. Valor predeterminado: access_token.
ClaimsEndpointFormatName No Nombre del parámetro de cadena de consulta de formato. Por ejemplo, puede establecer el nombre como format en este punto de conexión https://api.linkedin.com/v1/people/~?format=jsonde notificaciones de LinkedIn .
ClaimsEndpointFormat No Valor del parámetro de cadena de consulta de formato. Por ejemplo, puede establecer el valor como json en este punto de conexión https://api.linkedin.com/v1/people/~?format=jsonde notificaciones de LinkedIn .
BearerTokenTransmissionMethod No Especifica cómo se envía el token. El método predeterminado es una cadena de consulta. Para enviar el token como encabezado de solicitud, establezca en AuthorizationHeader.
ExtraParamsInClaimsEndpointRequest No Contiene los parámetros adicionales que algunos proveedores de identidades pueden devolver en la solicitud ClaimsEndpoint . Se deben escapar varios nombres de parámetro y separarse por el delimitador de comas ','.

Configuración del parámetro de cadena de consulta del token de acceso

El punto de conexión de información de usuario puede requerir que el token de acceso se envíe en un parámetro de cadena de consulta determinado. Para cambiar el nombre del parámetro de cadena de consulta, que contiene el token de acceso, use los ClaimsEndpointAccessTokenName metadatos. En el ejemplo siguiente, el parámetro de cadena de consulta del token de acceso se establece en token.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointAccessTokenName">token</Item>

La siguiente llamada HTTP muestra una llamada al punto de conexión de información de usuario con ClaimsEndpointAccessTokenName establecido en token:

GET /oauth2/claims?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Configuración del formato de notificaciones

ClaimsEndpointFormatName y ClaimsEndpointFormat permiten enviar un parámetro de cadena de consulta de par clave-valor al punto de conexión de información de usuario. En el ejemplo siguiente se configura un parámetro de cadena de consulta denominado format, con el valor de json.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointFormatName">format</Item>
<Item Key="ClaimsEndpointFormat">json</Item>

La siguiente solicitud HTTP muestra una llamada al punto de conexión de información de usuario con ClaimsEndpointFormatName y ClaimsEndpointFormat configurado.

GET /oauth2/claims?format=json&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Configuración del método de transmisión de tokens de portador

De forma predeterminada, el token de acceso se envía al punto de conexión de información de usuario de proveedores de identidades a través de un parámetro de cadena de consulta. Para enviar el token dentro del encabezado HTTP Authorization , establezca BearerTokenTransmissionMethod los metadatos AuthorizationHeaderen .

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>

La siguiente solicitud HTTP muestra cómo se pasa el token de acceso cuando BearerTokenTransmissionMethod se establece en AuthorizationHeader.

GET /oauth2/claims

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Paso de parámetros devueltos por el punto de conexión del token

Algunos proveedores de identidades requieren pasar parámetros adicionales que se devuelven desde el punto de conexión del token al punto de conexión de información de usuario. Por ejemplo, la respuesta del punto de conexión del token contiene un parámetro denominado resource, que es un parámetro obligatorio del punto de conexión de información de usuario (además del token de acceso). Use los ExtraParamsInClaimsEndpointRequest metadatos para especificar los parámetros adicionales que se van a pasar. Se deben escapar varios nombres de parámetro y separarse por el delimitador de comas ','.

En el siguiente json se muestra una carga JSON devuelta por el punto de conexión del token con un parámetro denominado resource.

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 960000,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11"
}

Para pasar el resource parámetro al punto de conexión de información de usuario, agregue los metadatos siguientes:

<Item Key="ExtraParamsInClaimsEndpointRequest">resource</Item>

La siguiente solicitud HTTP muestra cómo se pasa el resource parámetro al punto de conexión de información de usuario.

GET /oauth2/claims?resource=f2a76e08-93f2-4350-833c-965c02483b11&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Extremo de la sesión final

Para cerrar la sesión del usuario de la aplicación, redirija al usuario al punto de conexión de cierre de sesión de Azure AD B2C (para OAuth2 y OpenID Connect) o envíe un LogoutRequest (para SAML). Azure AD B2C borrará la sesión del usuario desde el explorador. Tras una solicitud de cierre de sesión, Azure AD B2C intenta cerrar la sesión de los proveedores de identidades federados que el usuario pueda haber iniciado sesión. El URI de cierre de sesión del proveedor de identidades de OAuth2 está configurado en los end_session_endpoint metadatos. Cuando el usuario cierra la sesión de la aplicación a través de Azure AD B2C, se creará un iframe oculto que llamará a end_session_endpoint en su página de cierre de sesión de Azure AD B2C.

En la tabla siguiente se enumeran los metadatos del punto de conexión de información de usuario.

Atributo Obligatorio Descripción
end_session_endpoint Dirección URL del punto de conexión de sesión final según RFC 6749.
SingleLogoutEnabled No Indica si, durante el inicio de sesión, el perfil técnico intenta cerrar sesión desde los proveedores de identidades federados. Para obtener más información, consulte Cierre de sesión de Azure AD B2C. Valores posibles: true (opción predeterminada) o false.

Metadatos genéricos de OAuth2

En la tabla siguiente se enumeran los metadatos genéricos del proveedor de identidades de OAuth2. Los metadatos describen cómo el perfil técnico de OAuth2 controla la validación de tokens, obtienen las notificaciones y reaccionan a los mensajes de error.

Atributo Obligatorio Descripción
IdTokenAudience No Audiencia del id_token. Si se especifica, Azure AD B2C comprueba si el token está en una notificación devuelta por el proveedor de identidades y es igual al especificado.
ProviderName No Nombre del proveedor de identidades.
ResponseErrorCodeParamName No Nombre del parámetro que contiene el mensaje de error devuelto a través de HTTP 200 (Ok).
IncludeClaimResolvingInClaimsHandling   No En el caso de las notificaciones de entrada y salida, especifica si se incluye la resolución de notificaciones en el perfil técnico. Valores posibles: true o false (valor predeterminado). Si desea utilizar un solucionador de notificaciones en el perfil técnico, establézcalo en true.
ResolveJsonPathsInJsonTokens No Indica si el perfil técnico resuelve las rutas de acceso JSON. Valores posibles: true o false (valor predeterminado). Use estos metadatos para leer datos de un elemento JSON anidado. En outputClaim, establezca en PartnerClaimType el elemento de ruta de acceso JSON que desea generar. Por ejemplo: firstName.localized o data[0].to[0].email.

Claves criptográficas

El elemento CryptographicKeys contiene el atributo siguiente:

Atributo Obligatorio Descripción
client_secret Secreto de cliente de la aplicación del proveedor de identidades. La clave criptográfica solo es necesaria si los metadatos de response_types se establecen en code. En este caso, Azure AD B2C realiza otra llamada para intercambiar el código de autorización de un token de acceso. Si los metadatos se establecen id_tokenen , puede omitir la clave criptográfica.
assertion_signing_key No Cuando los token_endpoint_auth_method metadatos se establecen private_key_jwten , proporcione un certificado X509 que se usará para firmar la clave JWT. El proveedor de identidades de OAuth2 le debe proporcionar esta clave.

URI de redirección

Al configurar el URI de redireccionamiento del proveedor de identidades, escriba https://{tenant-name}.b2clogin.com/{tenant-name}.onmicrosoft.com/oauth2/authresp. Asegúrese de reemplazar {tenant-name} por el nombre del inquilino (por ejemplo, contosob2c). El URI de redireccionamiento necesita estar escrito todo en minúsculas.