Não consigo encontrar nenhuma documentação sobre como restringir o login ao meu aplicativo da web (que usa OAuth2.0 e APIs do Google) para aceitar apenas solicitações de autenticação de usuários com um e-mail em um nome de domínio específico ou conjunto de nomes de domínio. Eu gostaria de colocar na lista de permissões em vez de na lista de proibições.
Alguém tem sugestões sobre como fazer isso, documentação sobre o método oficialmente aceito de fazer isso ou uma solução alternativa fácil e segura?
Para registro, não sei de nenhuma informação sobre o usuário até que ele tente fazer login por meio da autenticação OAuth do Google. Tudo que recebo de volta são as informações básicas do usuário e o e-mail.
google-api
oauth-2.0
google-oauth
paradox870
fonte
fonte
Respostas:
Portanto, tenho uma resposta para você. Na solicitação oauth, você pode adicionar "hd = domain.com" e isso restringirá a autenticação aos usuários desse domínio (não sei se você pode fazer vários domínios). Você pode encontrar o parâmetro hd documentado aqui
Estou usando as bibliotecas API do google aqui: http://code.google.com/p/google-api-php-client/wiki/OAuth2, então tive que editar manualmente o arquivo /auth/apiOAuth2.php para este :
Edit: Ainda estou trabalhando neste aplicativo e encontrei este, que pode ser a resposta mais correta para esta pergunta. https://developers.google.com/google-apps/profiles/
fonte
hd
parâmetro nacreateAuthUrl
função, ainda precisará verificar se o usuário está fazendo login com o endereço de e-mail do seu domínio. É muito fácil alterar o parâmetro do link para permitir todos os endereços de e-mail e, posteriormente, obter acesso ao seu aplicativo.hd
uso do parâmetro, consulte developers.google.com/identity/work/it-apps E a referência dohd
parâmetro URI pode ser encontrada developers.google.com/identity/protocols/… Em sinopse, ohd
parâmetro deve ser visto como um filtro de exibição baseado em domínio para o Google Auth lado, mas ainda deve ser validado do seu lado.hd
parâmetro, só posso restringir um domínio, e se eu quiser restringir dois ou três domínios?Lado do cliente:
Usando a
auth2
função init, você pode passar ohosted_domain
parâmetro para restringir as contas listadas no pop-up de login às que correspondem ao seuhosted_domain
. Você pode ver isso na documentação aqui: https://developers.google.com/identity/sign-in/web/referenceLado do servidor:
Mesmo com uma lista restrita do lado do cliente, você precisará verificar se o
id_token
corresponde ao domínio hospedado que você especificou. Para algumas implementações, isso significa verificar ohd
atributo que você recebe do Google após verificar o token.Exemplo de pilha completa:
Código da web:
Código do servidor (usando a biblioteca Googles Node.js):
Se você não usa Node.js, pode ver outros exemplos aqui: https://developers.google.com/identity/sign-in/web/backend-auth
fonte
Ao definir seu provedor, passe um hash no final com o parâmetro 'hd'. Você pode ler sobre isso aqui. https://developers.google.com/accounts/docs/OpenIDConnect#hd-param
Por exemplo, para config / initializers / devise.rb
fonte
Aqui está o que fiz usando o passaporte em node.js.
profile
é o usuário que está tentando fazer login.Em seguida, crie uma lógica para procurar vários domínios em vez de apenas um. Eu acredito que este método é seguro porque 1. o símbolo '@' não é um caractere válido na primeira ou segunda parte de um endereço de e-mail. Não consegui enganar a função criando um endereço de e-mail como
mike@[email protected]
2. Em um sistema de login tradicional, consegui, mas esse endereço de e-mail nunca poderia existir no Google. Se não for uma conta do Google válida, você não pode fazer o login.fonte
Desde 2015, existe uma função na biblioteca para definir isso sem a necessidade de editar a fonte da biblioteca como na solução alternativa de aaron-bruce
Antes de gerar o url, basta ligar
setHostedDomain
para o seu cliente Googlefonte