Parece que no puedo encontrar ninguna documentación sobre cómo restringir el inicio de sesión en mi aplicación web (que usa OAuth2.0 y las API de Google) para aceptar solo solicitudes de autenticación de usuarios con un correo electrónico en un nombre de dominio específico o un conjunto de nombres de dominio. Me gustaría incluirlo en la lista blanca en lugar de en la lista negra.
¿Alguien tiene alguna sugerencia sobre cómo hacer esto, documentación sobre el método oficialmente aceptado para hacerlo o una solución fácil y segura?
Para el registro, no conozco ninguna información sobre el usuario hasta que intenta iniciar sesión a través de la autenticación OAuth de Google. Todo lo que recibo es la información básica del usuario y el correo electrónico.
fuente
Respuestas:
Así que tengo una respuesta para ti. En la solicitud de oauth puede agregar "hd = dominio.com" y restringirá la autenticación a los usuarios de ese dominio (no sé si puede hacer varios dominios). Puede encontrar el parámetro hd documentado aquí
Estoy usando las bibliotecas de google api desde aquí: http://code.google.com/p/google-api-php-client/wiki/OAuth2, así que tuve que editar manualmente el archivo /auth/apiOAuth2.php a este :
Editar: todavía estoy trabajando en esta aplicación y encontré esto, que puede ser la respuesta más correcta a esta pregunta. https://developers.google.com/google-apps/profiles/
fuente
hd
parámetro en lacreateAuthUrl
función, aún deberá verificar que el usuario esté iniciando sesión con su dirección de correo electrónico de dominio. Es muy fácil cambiar el parámetro de enlace para permitir todas las direcciones de correo electrónico y, posteriormente, obtener acceso a su aplicación.hd
uso de parámetros, consulte developers.google.com/identity/work/it-apps Y la referencia delhd
parámetro URI se puede encontrar developers.google.com/identity/protocols/… En la sinopsis, el parámetrohd
debe ser visto como un filtro de visualización basado en el dominio para el lado de la autenticación de Google, pero aún debe ser validado por su lado.hd
parámetro, solo puedo restringir un dominio. Ahora, ¿qué pasa si quiero restringir dos o tres dominios?Lado del cliente:
Con la
auth2
función init, puede pasar elhosted_domain
parámetro para restringir las cuentas que aparecen en la ventana emergente de inicio de sesión a aquellas que coincidan con suhosted_domain
. Puede ver esto en la documentación aquí: https://developers.google.com/identity/sign-in/web/referenceLado del servidor:
Incluso con una lista restringida del lado del cliente, deberá verificar que
id_token
coincida con el dominio alojado que especificó. Para algunas implementaciones, esto significa verificar elhd
atributo que recibe de Google después de verificar el token.Ejemplo de pila completa:
Código web:
Código del servidor (usando la biblioteca Node.js de googles):
Si no está utilizando Node.js, puede ver otros ejemplos aquí: https://developers.google.com/identity/sign-in/web/backend-auth
fuente
Cuando defina su proveedor, pase un hash al final con el parámetro 'hd'. Puedes leer sobre eso aquí. https://developers.google.com/accounts/docs/OpenIDConnect#hd-param
Por ejemplo, para config / initializers / devise.rb
fuente
Esto es lo que hice usando passport en node.js.
profile
es el usuario que intenta iniciar sesión.Luego, simplemente cree lógica para buscar varios dominios en lugar de solo uno. Creo que este método es seguro porque 1. el símbolo '@' no es un carácter válido en la primera o segunda parte de una dirección de correo electrónico. No pude engañar a la función creando una dirección de correo electrónico como
mike@[email protected]
2. En un sistema de inicio de sesión tradicional, podría, pero esta dirección de correo electrónico nunca podría existir en Google. Si no es una cuenta de Google válida, no puede iniciar sesión.fuente
Desde 2015 ha habido una función en la biblioteca para configurar esto sin necesidad de editar la fuente de la biblioteca como en la solución alternativa de aaron-bruce
Antes de generar la URL, simplemente llame
setHostedDomain
a su cliente de Googlefuente