Inicio de sesión de usuarios con Microsoft
En este documento se explica cómo usar Identity Platform para iniciar sesión con Microsoft. Se admiten tanto cuentas personales de Microsoft como cuentas de Azure Active Directory (Azure AD).
Antes de empezar
En este tutorial se da por hecho que ya has habilitado Identity Platform y que tienes una aplicación web básica escrita en HTML y JavaScript. Consulta la guía de inicio rápido para saber cómo hacerlo.
Configurar Microsoft como proveedor
Para configurar Microsoft como proveedor de identidades, sigue estos pasos:
Ve a la página Proveedores de identidades de la consola de Google Cloud .
Haz clic en Add A Provider (Añadir proveedor).
Selecciona Microsoft en la lista.
Introduce tu ID de aplicación y tu secreto de aplicación de Microsoft. Si aún no tienes un ID y un secreto, sigue los pasos que se indican en Inicio rápido: registrar una aplicación con el endpoint v2.0 de Azure AD para obtenerlos.
Este endpoint admite tanto cuentas personales de Microsoft como cuentas de Azure AD. Para obtener más información sobre Azure AD, consulta la descripción general de la plataforma de identidad de Microsoft (versión 2.0).
Configura el URI que aparece en Configurar Microsoft como el URI de redirección de OAuth válido para tu aplicación de Microsoft. Si has configurado un dominio personalizado en Identity Platform, actualiza el URI de redirección en la configuración de tu aplicación de Microsoft para que use el dominio personalizado en lugar del dominio predeterminado. Por ejemplo, cambia
https://myproject.firebaseapp.com/__/auth/handler
porhttps://auth.myownpersonaldomain.com/__/auth/handler
.Para registrar los dominios de tu aplicación, haz clic en Añadir dominio en Dominios autorizados. Para actividades de desarrollo,
localhost
ya está habilitado de forma predeterminada.En Configura tu aplicación, haz clic en Detalles de la configuración. Copia el fragmento en el código de tu aplicación para inicializar el SDK de cliente de Identity Platform.
Haz clic en Guardar.
Inicio de sesión de usuarios con el SDK de cliente
Crea una instancia del objeto
OAuthProvider
y pasamicrosoft.com
como ID de proveedor:JavaScript
var provider = new firebase.auth.OAuthProvider('microsoft.com');
Opcional: Añade permisos de OAuth. Los permisos especifican los datos que solicitas a Microsoft. Es posible que los datos más sensibles requieran ámbitos específicos. Consulta la documentación de Microsoft para determinar qué ámbitos necesita tu aplicación.
JavaScript
provider.addScope('mail.read'); provider.addScope('calendars.read');
Opcional: especifica parámetros de OAuth personalizados adicionales. Son específicas de Microsoft y se suelen usar para personalizar la experiencia de autenticación.
JavaScript
provider.setCustomParameters({ // Force re-consent. prompt: 'consent', // Target specific email with login hint. login_hint: 'user@firstadd.onmicrosoft.com' });
Puedes usar el parámetro
mkt
para personalizar el idioma del flujo de autenticación. Por ejemplo:provider.setCustomParameters({ mkt: 'fr' });
Puede usar la propiedad
tenant
para limitar el acceso a usuarios que no pertenezcan a un dominio de Azure AD concreto. Especifica el nombre de dominio descriptivo del inquilino o su identificador GUID. Los usuarios que no pertenezcan a este dominio no podrán iniciar sesión. Por ejemplo:provider.setCustomParameters({ // Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". tenant: 'TENANT_ID' });
Consulta la documentación de OAuth de Microsoft para ver la lista completa de parámetros que admite Microsoft. Ten en cuenta que no puedes transferir parámetros reservados por OAuth o Identity Platform.
Usa el objeto
OAuthProvider
para iniciar la sesión del usuario. Puedes abrir una ventana emergente o redirigir la página actual. La redirección es más sencilla para los usuarios de dispositivos móviles.Para mostrar una ventana emergente, llama a
signInWithPopup()
:JavaScript
firebase.auth().signInWithPopup(provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Para redirigir la página, primero llama a
signInWithRedirect()
:Sigue las prácticas recomendadas cuando uses
signInWithRedirect
,linkWithRedirect
oreauthenticateWithRedirect
.JavaScript
firebase.auth().signInWithRedirect(provider);
A continuación, recupera el token de Microsoft llamando a
getRedirectResult()
cuando se cargue tu página:JavaScript
firebase.auth().getRedirectResult() .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Una vez que tengas un token de acceso, podrás usarlo para llamar a la API de Microsoft Graph. Por ejemplo:
REST
curl -i -H "Authorization: Bearer [ACCESS_TOKEN]" https://graph.microsoft.com/v1.0/me
A diferencia de otros proveedores compatibles con Identity Platform, Microsoft no proporciona una URL de foto para los usuarios. En su lugar, tendrás que usar la API Graph para solicitar los datos binarios de la foto.
Además del token de acceso, también puedes obtener el token de ID de Microsoft de un usuario.
La reclamación oid
de este token contiene un ID único del usuario. Puedes compararlo con el ID que se encuentra en user.providerData[0].uid
. Si tus usuarios inician sesión con un tenant de Azure AD, estos campos coincidirán exactamente. Si no es así, el campo se rellenará con ceros (por ejemplo, el ID federado 4b2eabcdefghijkl
se mostrará como 00000000-0000-0000-4b2e-abcdefghijkl
).
No uses la reclamación sub
para comparar IDs de usuario. La reclamación sub
es específica de la aplicación
y no coincidirá con el ID que usa Microsoft.
Inicio de sesión de usuarios de forma manual
Otros proveedores de Identity Platform, como Google, Facebook y Twitter, te permiten iniciar la sesión de los usuarios manualmente llamando a signInWithCredential()
.
Esta función no está disponible para Microsoft. Identity Platform no puede verificar la audiencia de los tokens de acceso de OAuth de Microsoft, lo cual es un requisito de seguridad fundamental.
Si no puedes usar el SDK de cliente de Identity Platform para iniciar la sesión de los usuarios, tendrás que usar una biblioteca OAuth de terceros para autenticarte con Microsoft. A continuación, puedes usar la autenticación personalizada para intercambiar la credencial de Microsoft por un token personalizado.
Siguientes pasos
- Más información sobre los usuarios de Identity Platform
- Permite que los usuarios inicien sesión con otros proveedores de identidades.