16

我和这里的一些人正在创业。我们目前正在使用 Google OpenID API 来管理注册和登录到我们的应用程序,但我们希望迁移到更简单的用户注册模型。为此,我们需要知道是否有一种方法可以检测电子邮件(不是 gmail)是否已经是 Google 帐户。有没有办法从 Google Single Sign-on API 获取这些信息?

以前感谢您的帮助!:)

4

7 回答 7

22

如果您使用的是 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.
于 2015-12-30T07:04:43.487 回答
5

这不是一个完整的解决方案,但您可以通过查看其域的 MX 记录来判断某人是否在 Google Apps 上。答案中的链接对我不起作用,所以这可能是一个更好的解决方案。

于 2013-01-31T13:36:31.690 回答
4

你不能这样做。未经用户同意,我认为 Google 无法告诉您这一点。

但是,您可以通过将其用作发现 URL 来查看该域是否是 Google Apps 域: https ://www.google.com/accounts/o8/site-xrds?hd=mail.moztw.org

请注意,域的管理员可能未正确安装域的 OpenID 支持。我的幻灯片对此进行了详细讨论: http ://www.slideshare.net/timdream/google-apps-account-as-openid

于 2010-11-25T05:54:54.540 回答
2

您可以使用 google api 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!;
    }

于 2019-12-21T10:45:19.777 回答
1

请注意,MX 记录并不总是证明电子邮件地址能够执行 google SSO/OAUTH。
例如,gene.com (genentech) 使用 google 提供所有服务,但这是他们的 mx 响应:

nslookup -type=mx gene.com
Server:     127.0.0.53
Address:    127.0.0.53#53

Non-authoritative answer:
gene.com    mail exchanger = 30 ridesmtaext02.roche.com.
gene.com    mail exchanger = 60 mtaalt4.roche.com.
gene.com    mail exchanger = 30 ridesmtaext01.roche.com.
gene.com    mail exchanger = 40 rkamtaext01.roche.com.
gene.com    mail exchanger = 40 rkamtaext02.roche.com.
gene.com    mail exchanger = 40 rmumtaext02.roche.com.
gene.com    mail exchanger = 30 sc1esmtaext02.gene.com.
gene.com    mail exchanger = 30 sc1esmtaext01.gene.com.
gene.com    mail exchanger = 60 mtaalt2.roche.com.
gene.com    mail exchanger = 60 mtaalt3.roche.com.
gene.com    mail exchanger = 40 rmumtaext01.roche.com.
gene.com    mail exchanger = 60 mtaalt1.roche.com.

Authoritative answers can be found from:
于 2021-11-02T16:25:32.653 回答
1

我制定了 Doug 的建议,它奏效了。只需确保调用该函数的(有效)用户有权调用 addViewer。完成此操作的技巧是确保从触发例程调用例程,因此脚本的所有者是有效用户。

function checkIfGoogleAccount(emailAddress) {
  try {
    SpreadsheetApp.getActiveSpreadsheet().addViewer(emailAddress) ;
    SpreadsheetApp.getActiveSpreadsheet().removeViewer(emailAddress) ;
    return true ;
  }
  catch(err) {
    return false ;
  }
}
于 2017-02-11T15:31:20.847 回答
0

我通过一个虚拟文件来做到这一点,我使用 addViewer 函数将电子邮件地址添加到该文件中。我尝试这样做……抓住。如果发现错误,那么我将我的本地标志设置为“不是谷歌帐户”。如果没有错误,然后我将它们作为我的虚拟文件的查看器删除,并设置我的标志以说明电子邮件地址是合法的 google 帐户。

于 2014-01-21T15:01:40.317 回答