Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Antes de empezar, use el selector Elegir un tipo de directiva en la parte superior de esta página para elegir el tipo de directiva que está configurando. Azure Active Directory B2C ofrece dos métodos para definir cómo interactúan los usuarios con las aplicaciones: a través de flujos de usuario predefinidos o mediante directivas personalizadas totalmente configurables. Los pasos necesarios en este artículo son diferentes para cada método.
El flujo de concesión de credenciales de cliente de OAuth 2.0 permite que una aplicación (cliente confidencial) use sus propias credenciales, en lugar de suplantar a un usuario, para autenticarse al llamar a un recurso web, como la API de REST. Este tipo de concesión se usa principalmente para las interacciones entre servidores que se deben ejecutar en segundo plano, sin la interacción inmediata con un usuario. Estos tipos de aplicaciones a menudo se denominan demonios o cuentas de servicio.
En el flujo de credenciales de cliente, un administrador concede los permisos directamente en la propia aplicación. Cuando la aplicación presenta un token a un recurso, el recurso exige que la propia aplicación tenga autorización para realizar una acción, ya que no hay ningún usuario involucrado en la autenticación. En este artículo se describen los pasos necesarios para autorizar a una aplicación a llamar a una API y cómo obtener los tokens necesarios para llamar a esa API.
Nota:
Esta característica está en versión preliminar pública.
Introducción al registro de aplicaciones
Para permitir que la aplicación inicie sesión con credenciales de cliente y, a continuación, llame a una API web, registre dos aplicaciones en el directorio de Azure AD B2C.
El registro de la aplicación permite que la aplicación inicie sesión con Azure AD B2C. El proceso de registro de la aplicación genera un identificador de aplicación, también conocido como identificador de cliente, que permite identificar de forma exclusiva la aplicación. También se crea un secreto de cliente, que la aplicación usa para obtener los tokens de forma segura.
El registro de API web permite que la aplicación llame a una API web segura. El registro incluye los ámbitos de la API web. Los ámbitos ofrecen una manera de administrar permisos para los recursos protegidos, como la API web. A continuación, a la aplicación se le conceden permisos para los ámbitos de la API web. Cuando se solicita un token de acceso, la aplicación especifica el
.defaultparámetro de alcance de la solicitud. Azure AD B2C devuelve los ámbitos de API web concedidos a la aplicación.
En el siguiente diagrama se muestran los registros y la arquitectura de la aplicación:
Paso 1: Registrar la aplicación de API web
En este paso, registrará la API web (App 2) con los ámbitos. Más adelante, concede permiso a la aplicación (Aplicación 1) a esos ámbitos. Si ya tiene este registro de aplicación, omita este paso y, a continuación, vaya al siguiente, Paso 1.1 Definir roles de API web (ámbitos).
Siga estos pasos para crear el registro de aplicación de API web (Id. de aplicación: 2):
Inicie sesión en Azure Portal.
Asegúrese de que usa el directorio que contiene el inquilino de Azure AD B2C. Seleccione el icono Directorios y suscripciones en la barra de herramientas del portal.
En la página Configuración del portal | Directorios y suscripciones, busque el directorio de Azure AD B2C en la lista Nombre de directorio y seleccione Cambiar.
En Azure Portal, busque y seleccione Azure AD B2C.
Seleccione Registros de aplicaciones y luego Nuevo registro.
En Nombre, escriba un nombre para la aplicación (por ejemplo, my-api1). Deje los valores predeterminados para URI de redireccionamiento y Tipos de cuenta admitidos.
Seleccione Registrar.
Una vez completado el registro de la aplicación, seleccione Información general.
Anote el valor Id. de aplicación (cliente) para usarlo más adelante al configurar la aplicación web.
Paso 1.1 Definir roles de API web (ámbitos)
En este paso, configurará el URI del ID de aplicación de la API web y, a continuación, definirá los roles de la aplicación. Los roles de la aplicación, utilizados por los ámbitos de OAuth 2.0 y definidos en un registro de aplicación que representa su API. La aplicación usa el URI de id. de aplicación con el ámbito .default. Para definir roles de aplicación, siga estos pasos:
Seleccione la API web que ha creado, por ejemplo, my-api1.
En Administrar, seleccione Exponer una API.
Junto a URI de id. de aplicación, seleccione el vínculo Establecer. Reemplace el valor predeterminado (GUID) por un nombre único (por ejemplo, api) y, a continuación, seleccione Guardar.
Copie el URI del identificador de aplicación. En la captura de pantalla siguiente se muestra cómo copiar el URI del identificador de aplicación.
En Administrar, seleccione Manifiesto para abrir el editor de manifiestos de la aplicación. En el editor, localice el valor
appRolesy defina los roles de aplicación que tienen como objetivoapplications. Cada definición de rol de aplicación debe tener un identificador único global (GUID) para suidvalor. Genere un nuevo GUID mediante la ejecuciónnew-guidde un comando en Microsoft PowerShell o un generador de GUID en línea. La propiedadvaluede cada definición de roles de aplicación aparece en el ámbito, la notificaciónscp. La propiedadvalueno puede contener espacios. En el ejemplo siguiente se muestran dos roles de aplicación, lectura y escritura:"appRoles": [ { "allowedMemberTypes": ["Application"], "displayName": "Read", "id": "d6a15e20-f83c-4264-8e61-5082688e14c8", "isEnabled": true, "description": "Readers have the ability to read tasks.", "value": "app.read" }, { "allowedMemberTypes": ["Application"], "displayName": "Write", "id": "204dc4ab-51e1-439f-8c7f-31a1ebf3c7b9", "isEnabled": true, "description": "Writers have the ability to create tasks.", "value": "app.write" }],En la parte superior de la página, seleccione Guardar para guardar los cambios del manifiesto.
Paso 2: Registrar una aplicación
Para permitir que la aplicación inicie sesión con Azure AD B2C mediante el flujo de credenciales de cliente, puede usar una aplicación existente o registrar una nueva (aplicación 1).
Si usas una aplicación existente, asegúrate de que el valor de accessTokenAcceptedVersion la aplicación esté configurado en 2:
- En Azure Portal, busque y seleccione Azure AD B2C.
- Seleccione Registros de aplicaciones y, a continuación, seleccione la aplicación existente de la lista.
- En el menú de la izquierda, en Administrar, seleccione Manifiesto para abrir el editor de manifiestos.
- Localice el
accessTokenAcceptedVersionelemento y establezca su valor en2. - En la parte superior de la página, seleccione Guardar para guardar los cambios.
Para crear un nuevo registro de aplicación web, siga estos pasos:
En Azure Portal, busque y seleccione Azure AD B2C
Seleccione Registros de aplicaciones y luego Nuevo registro.
Escriba un Nombre para la aplicación. Por ejemplo, ClientCredentials_app.
Deje los demás valores como están y, a continuación, seleccione Registrar.
Registre el identificador de aplicación (cliente) para usarlo en un paso posterior.
Paso 2.1 Creación de un secreto de cliente
Cree un secreto de cliente para la aplicación registrada. La aplicación usa el secreto de cliente para demostrar su identidad cuando solicita tokens.
En Administrar, seleccione Certificados y secretos.
Seleccione Nuevo secreto de cliente.
En el cuadro Descripción , escriba una descripción para el secreto de cliente (por ejemplo, clientsecret1).
En Expira, seleccione el tiempo durante el cual el secreto es válido y, a continuación, seleccione Agregar.
Registre el valor del secreto. Este valor se usa para la configuración en un paso posterior.
Paso 2.2 Conceder permisos a la aplicación para la API web
Para conceder permisos a tu aplicación (App 1), sigue estos pasos:
Seleccione Registros de aplicaciones y, a continuación, seleccione la aplicación que creó (Aplicación 1).
En Administrar, seleccione Permisos de API.
En Permisos configurados, seleccione Agregar un permiso.
Seleccione la pestaña Mis API.
Seleccione la API (App 2) a la que se debe conceder acceso a la aplicación web. Por ejemplo, escriba my-api1.
Seleccione Permiso de aplicación.
En Permiso, expanda aplicación y, a continuación, seleccione los ámbitos que definió anteriormente (por ejemplo, app.read y app.write).
Seleccione Agregar permisos.
Seleccione Conceder consentimiento de administrador para <el nombre de inquilino>.
Seleccione Sí.
Seleccione Actualizar y compruebe que aparece Granted for... (Concedido para...) en Estado para ambos ámbitos.
Paso 3: Obtener un token de acceso
No hay acciones específicas para habilitar las credenciales de cliente para los flujos de usuario o las políticas personalizadas. Tanto los flujos de usuario de Azure AD B2C como las directivas personalizadas admiten el flujo de credenciales de cliente. Si aún no lo ha hecho, cree un flujo de usuario o una política personalizada. A continuación, utilice su aplicación de desarrollo de API favorita para generar una solicitud de autorización. Construya una llamada como este ejemplo con la siguiente información como cuerpo de la solicitud POST:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token
- Reemplácelo
<tenant-name>por el nombre del inquilino de Azure AD B2C. Por ejemplo:contoso.b2clogin.com. - Reemplácelo
<policy>por el nombre completo del flujo de usuario o la política personalizada. Tenga en cuenta que todos los tipos de flujos de usuario y políticas personalizadas admiten el flujo de credenciales de cliente. Puede usar cualquier flujo de usuario o directiva personalizada que tenga, o crear una nueva, como registro o inicio de sesión.
| Clave | Importancia |
|---|---|
| tipo_de_subvención | client_credentials |
| ID de cliente | El ID de cliente del Paso 2 Registrar una aplicación. |
| secreto_del_cliente | El valor del secreto de cliente del paso 2.1 Crear un secreto de cliente. |
| alcance | El URI de id. de aplicación del Paso 1.1 Definición de roles de API web (ámbitos) y .default. Por ejemplo https://contoso.onmicrosoft.com/api/.default, o https://contoso.onmicrosoft.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/.default. |
La solicitud POST real tiene un aspecto similar al siguiente ejemplo:
Solicitud:
POST /<tenant-name>.onmicrosoft.com/B2C_1A_SUSI/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=11112222-bbbb-3333-cccc-4444dddd5555
&client_secret=FyX7Q~DuPJ...
&scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2F.default
Respuesta:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5OZDlnUkNWWUc2dUs...",
"token_type": "Bearer",
"not_before": 1645172292,
"expires_in": 3600,
"expires_on": 1645175892,
"resource": "11112222-bbbb-3333-cccc-4444dddd5555"
}
Aprende sobre las reclamaciones de devolución del token de acceso. En la tabla siguiente se enumeran las reclamaciones relacionadas con el flujo de credenciales del cliente.
| Reclamación | Descripción | Importancia |
|---|---|---|
aud |
Identifica al destinatario previsto del token. | El ID de cliente de la API. |
sub |
La entidad de servicio se asocia a la aplicación que inició la solicitud. | Es la entidad de servicio de client_id de la solicitud de autorización. |
azp |
Parte autorizada: la parte a la que se emitió el token de acceso. |
El ID de cliente de la aplicación que inició la solicitud. Es el mismo valor que especificó en la client_id solicitud de autorización. |
scp |
Conjunto de ámbitos expuestos por la API de la aplicación (delimitador de espacio). | En el flujo de credenciales de cliente, la solicitud de autorización solicita el .default ámbito, mientras que el token contiene la lista de ámbitos expuestos (y consentidos por el administrador de la aplicación) por la API. Por ejemplo: app.read app.write. |
Paso 3.1 Obtener un token de acceso con script
Use el siguiente script de PowerShell para probar la configuración:
$appId = "<client ID>"
$secret = "<client secret>"
$endpoint = "https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token"
$scope = "<Your API id uri>/.default"
$body = "grant_type=client_credentials&scope=" + $scope + "&client_id=" + $appId + "&client_secret=" + $secret
$token = Invoke-RestMethod -Method Post -Uri $endpoint -Body $body
Utilice el siguiente script cURL para probar la configuración:
curl --location --request POST 'https://<your-tenant>.b2clogin.com/<your-tenant>.onmicrosoft.com/<policy>/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--form 'grant_type="client_credentials"' \
--form 'client_id="<client ID>"' \
--form 'client_secret="<client secret>"' \
--form 'scope="<Your API id uri>/.default"'
Paso 4: Personalizar el token
Esta característica está disponible solo para directivas personalizadas. Para conocer los pasos de configuración, seleccione Directiva personalizada en el selector anterior.
Las políticas personalizadas proporcionan una forma de ampliar el proceso de emisión de tokens. Para personalizar el recorrido del usuario de las credenciales de cliente de OAuth 2.0, siga las instrucciones sobre cómo configurar un recorrido de usuario con credenciales de cliente. Después, en el perfil técnico JwtIssuer, agregue los metadatos ClientCredentialsUserJourneyId con una referencia al recorrido del usuario que ha creado.
En el siguiente ejemplo se muestra cómo agregar el ClientCredentialsUserJourneyId al perfil técnico del emisor del token.
<TechnicalProfile Id="JwtIssuer">
<Metadata>
<Item Key="ClientCredentialsUserJourneyId">ClientCredentialsJourney</Item>
</Metadata>
</TechnicalProfile>
El siguiente ejemplo muestra un recorrido de usuario utilizando credenciales de cliente. El primer y el último paso de orquestación son necesarios.
<UserJourneys>
<UserJourney Id="ClientCredentialsJourney">
<OrchestrationSteps>
<!-- [Required] Do the client credentials -->
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="ClientCredSetupExchange" TechnicalProfileReferenceId="ClientCredentials_Setup" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- [Optional] Call a REST API or claims transformation -->
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="TokenAugmentation" TechnicalProfileReferenceId="TokenAugmentation" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- [Required] Issue the access token -->
<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
</UserJourney>
</UserJourneys>