我和这里的一些人正在创业。我们目前正在使用 Google OpenID API 来管理注册和登录到我们的应用程序,但我们希望迁移到更简单的用户注册模型。为此,我们需要知道是否有一种方法可以检测电子邮件(不是 gmail)是否已经是 Google 帐户。有没有办法从 Google Single Sign-on API 获取这些信息?
以前感谢您的帮助!:)
我和这里的一些人正在创业。我们目前正在使用 Google OpenID API 来管理注册和登录到我们的应用程序,但我们希望迁移到更简单的用户注册模型。为此,我们需要知道是否有一种方法可以检测电子邮件(不是 gmail)是否已经是 Google 帐户。有没有办法从 Google Single Sign-on API 获取这些信息?
以前感谢您的帮助!:)
如果您使用的是 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.
这不是一个完整的解决方案,但您可以通过查看其域的 MX 记录来判断某人是否在 Google Apps 上。答案中的链接对我不起作用,所以这可能是一个更好的解决方案。
你不能这样做。未经用户同意,我认为 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
您可以使用 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!;
}
请注意,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:
我制定了 Doug 的建议,它奏效了。只需确保调用该函数的(有效)用户有权调用 addViewer。完成此操作的技巧是确保从触发例程调用例程,因此脚本的所有者是有效用户。
function checkIfGoogleAccount(emailAddress) {
try {
SpreadsheetApp.getActiveSpreadsheet().addViewer(emailAddress) ;
SpreadsheetApp.getActiveSpreadsheet().removeViewer(emailAddress) ;
return true ;
}
catch(err) {
return false ;
}
}
我通过一个虚拟文件来做到这一点,我使用 addViewer 函数将电子邮件地址添加到该文件中。我尝试这样做……抓住。如果发现错误,那么我将我的本地标志设置为“不是谷歌帐户”。如果没有错误,然后我将它们作为我的虚拟文件的查看器删除,并设置我的标志以说明电子邮件地址是合法的 google 帐户。