Как определить, является ли электронное письмо учетной записью Google?

Я и несколько ребят здесь работаем над запуском. В настоящее время мы используем Google OpenID API для управления регистрацией и входом в наше приложение, но мы хотим перейти на более простую модель регистрации пользователей. И для этого нам нужно знать, есть ли способ определить, является ли электронное письмо (не Gmail) уже учетной записью Google. Есть ли способ получить эту информацию из API системы единого входа Google?

Предыдущее спасибо за вашу помощь! :)


person FernandoEscher    schedule 24.11.2010    source источник
comment
Это полный взлом для всех, кто ищет решение, связанное с этим. Если вы попытаетесь пригласить адрес электронной почты, не принадлежащий Google, в службу Google, для которой требуется учетная запись Google (личная почта Gmail или бизнес), вы можете получить сообщение об ошибке вроде неизвестного адреса электронной почты, если это не адрес Google. Вы можете использовать это, чтобы ответить на поставленный вопрос.   -  person Danger    schedule 25.01.2014
comment
Calendly, похоже, делает это в производственной среде: calendly.com/signup   -  person Nolan Amy    schedule 09.02.2019
comment
Я использовал тотальный хак после того, как некоторое время ломал голову над этим. Нашел эту ветку позже, но хотел убедиться, что мое решение было отмечено, и я вижу, что это так. Я просто добавлю свое конкретное решение - попытаться добавить электронную почту в качестве пользователя с разрешениями GA через API управления. Я немедленно удаляю разрешение пользователя. Но если мне удалось его добавить, значит, это действующий аккаунт Google.   -  person Chris Harrington    schedule 17.02.2019


Ответы (6)


Тебе этого не сделать. Я не думаю, что Google мог сказать вам это без согласия пользователя.

Однако вы можете узнать, является ли домен доменом Google Apps, используя его в качестве URL обнаружения: https://www.google.com/accounts/o8/site-xrds?hd=mail.moztw.org

Отметил, что администратор домена мог неправильно установить поддержку OpenID для домена. На моем слайде это подробно обсуждалось: http://www.slideshare.net/timdream/google-apps-account-as-openid

person timdream    schedule 25.11.2010
comment
Спасибо за ответ. Конечно, это невозможно сделать, начиная с того момента, когда протокол OpenID не обеспечивает никакой поддержки взаимодействия с пользователем, и все сказано. Действительно, мы уже используем обнаружение размещенных доменов. Спасибо за совет! :) - person FernandoEscher; 26.11.2010
comment
Я предлагаю тебе этого не делать. Тот факт, что адрес электронной почты находится в домене G-Suite, не обязательно означает, что у этого человека есть учетная запись Google. К сожалению, существуют домены G-Suite, где это не так, т. Е. где некоторые адреса электронной почты являются просто пересылками. - person rdb; 15.12.2016
comment
@rdb Да, вы правы, ответ скажет только, является ли данный домен доменом GSuite, а не сам адрес электронной почты. OpenID устарел, поэтому я бы взял на себя песчинку ответа. - person timdream; 22.12.2016
comment
Привет @FernandoEscher, даже я столкнулся с подобной проблемой. Можете ли вы помочь мне в достижении решения. Я имею в виду, как вы используете обнаружение размещенных доменов для решения проблемы. - person Vali Shah; 22.11.2017

Если вы используете Mac, откройте Терминал и введите $ host {example.com}, чтобы определить, размещена ли их электронная почта в Google.

Например:

$ host yelp.com
yelp.com has address 104.16.57.23
yelp.com has address 104.16.56.23
yelp.com mail is handled by 1 ASPMX.L.GOOGLE.com.
yelp.com mail is handled by 10 ASPMX2.GOOGLEMAIL.com.
yelp.com mail is handled by 10 ASPMX5.GOOGLEMAIL.com.
yelp.com mail is handled by 10 ASPMX3.GOOGLEMAIL.com.
yelp.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.com.
yelp.com mail is handled by 10 ASPMX4.GOOGLEMAIL.com.
yelp.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.com.
person dbadness    schedule 30.12.2015
comment
Просто и мило! - person shimatai; 18.02.2017
comment
Отличное решение! - person Johann Medina; 03.10.2018
comment
спасибо, тоже работает в 2020 :-) - person throbi; 23.12.2020

Это не полное решение, но вы можете определить, использует ли кто-то Google Apps, просмотрев записи MX его домена. Ссылка в ответе у меня не сработала, так что это может быть лучшим решением.

person Dan    schedule 31.01.2013
comment
ссылка не будет работать, если вы откроете в браузере .. выполните вызов curl и проверьте статус заголовка - person Rishabh; 15.05.2013
comment
в PHP используйте getmxrr и сравните результаты с google. Пример gist.github.com/samin/f89c0f9b67ae82200e22 - person Samin; 23.05.2014

Вы можете проверить поставщика удостоверений с помощью API Google https://dns.google.com/resolve?name=example.com&type=MX

    public static class IdentityProviderChecker
    {
        public static async Task<string?> GetProviderName(string email)
        {
            var domainName = email.Split('@').Last();
            using var client = new HttpClient();

            var result = await client.GetAsyncResult<DnsResponse>($"https://dns.google.com/resolve?name={domainName}&type=MX");
            return result.Answer.Any(x => x.Data.Contains("google.com", StringComparison.OrdinalIgnoreCase) || x.Data.Contains("googlemail.com", StringComparison.OrdinalIgnoreCase))
                ? "Google"
                : result.Answer.Any(x => x.Data.Contains("outlook.com", StringComparison.OrdinalIgnoreCase))
                    ? "Microsoft"
                    : null;
        }
    }

    public class DnsResponse
    {
        public Answer[] Answer { get; set; } = null!;
    }

    public class Answer
    {
        public string Data { get; set; } = null!;
    }

person Thom Kiesewetter    schedule 21.12.2019

Я разработал предложение Дуга, и оно работает. Просто убедитесь, что (эффективный) пользователь, вызывающий функцию, имеет право вызвать addViewer. Уловка для достижения этого заключается в том, чтобы убедиться, что процедура вызывается из подпрограммы триггера, поэтому владельцем сценария является эффективный пользователь.

function checkIfGoogleAccount(emailAddress) {
  try {
    SpreadsheetApp.getActiveSpreadsheet().addViewer(emailAddress) ;
    SpreadsheetApp.getActiveSpreadsheet().removeViewer(emailAddress) ;
    return true ;
  }
  catch(err) {
    return false ;
  }
}
person Lexcel Atmadata    schedule 11.02.2017

Я делаю это с помощью фиктивного файла, в который добавляю адрес электронной почты с помощью функции addViewer. Я делаю это в попытке ... уловить. Если обнаруживается ошибка, я устанавливаю свой локальный флаг, чтобы сказать «не учетная запись Google». Если ошибок нет, я затем удаляю их как средство просмотра моего фиктивного файла и устанавливаю свой флаг, чтобы указать, что адрес электронной почты является законным аккаунтом Google.

person Doug    schedule 21.01.2014