我正在使用 .net V3(dll 版本 2.0.1.0)的 Google 文档列表 api。我正在使用此链接https://developers.google.com/google-apps/documents-list/#authorizing_requests_with_clientlogin中所述的客户端登录身份验证
我如何确定它是 Google Apps 帐户还是普通 Google 帐户?
谢谢,巴拉特
我正在使用 .net V3(dll 版本 2.0.1.0)的 Google 文档列表 api。我正在使用此链接https://developers.google.com/google-apps/documents-list/#authorizing_requests_with_clientlogin中所述的客户端登录身份验证
我如何确定它是 Google Apps 帐户还是普通 Google 帐户?
谢谢,巴拉特
我认为没有很好的方法来检查帐户是否是 Google Apps 帐户。
检查电子邮件是否与@gmail.com 不同将不起作用,因为可以使用现有电子邮件地址创建 Google 帐户。
我想到的唯一方法是检查域的 DNS MX 记录,看看域的某些服务是否由 Google Apps 服务器提供(例如从 gmail 提供的电子邮件等......)但即使在那里你也可能需要检查更多而不是一项服务,因为某些 Google Apps 公司例如停用 Gmail(或其他服务)以使用自定义解决方案。
如果您的目标是检查用户是否有权访问给定的功能,您可以向元数据提要发送请求并检查<docs:feature>
元素。
例如,一个功能<docs:featureName>upload_any</docs:featureName>
表明用户可以上传任何类型的文档:
假设您包括:
https://www.googleapis.com/auth/userinfo.email
在您的 OAuth 范围内,您可以提出以下请求:
https://www.googleapis.com/oauth2/v2/userinfo
如果它是 Google Apps 帐户,则调用将返回一个“hd”参数(托管域?),并将 Google Apps 域作为其值。如果是消费者账户,无论是@gmail.com 还是潜在的“冲突账户”,都不会返回 hd 参数。请参阅下面的示例。admin@jay.powerposters.org 是 Google Apps 帐户,而 consumer@jay.powerposters.org 是消费者帐户。如果我在 Google Apps 域中创建消费者用户,它将成为一个冲突帐户,并且消费者帐户将被推出 @jay.powerposters.org 命名空间,但这还没有发生。
对于 admin@jay.powerposters.org:
GET https://www.googleapis.com/oauth2/v2/userinfo
HTTP/1.1 200 OK
Content-length: 99
X-xss-protection: 1; mode=block
...
{
"email": "admin@jay.powerposters.org",
"verified_email": true,
"hd": "jay.powerposters.org"
}
对于 consumer@jay.powerposters.org:
GET https://www.googleapis.com/oauth2/v2/userinfo
HTTP/1.1 200 OK
Content-length: 71
X-xss-protection: 1; mode=block
{
"email": "consumer@jay.powerposters.org",
"verified_email": true
}
Google 消费者帐户是@gmail.com
或很少@googlemail.com
,其余的将是 Google Apps 帐户。