如何在Google oauth2中仅允许一个电子邮件地址域? (仅需要将@ company.com列入白名单)

时间:2018-09-19 06:32:42

标签: ruby google-api google-oauth google-api-client google-oauth2

我正在准备一份封闭文档,该文档仅对使用Google电子邮件@ company.com的人员开放。我尝试使用尽可能简单的解决方案,因为我不是应用程序开发人员,也不知道我在做什么。

我当前的解决方案是Sinatra应用程序,该应用程序的自定义views路径设置为目录site,该目录是mkdocs生成的静态网站。所有路由都是通过Ruby main.rb定义的,该方法使用一种检查用户是否在加载html内容之前登录的方法,以便只有经过Google身份验证的用户才能查看该内容:

before do
 # Ensure user has authorized the app
 unless user_credentials.access_token || request.path_info =~ /^\/oauth2/
  redirect to('/oauth2authorize')
end

结束

我可以根据需要使用auth来解决一个问题,该问题将允许拥有任何Google帐户的任何人使用。

从我发现Google oAuth似乎没有白名单选项的角度来看,我希望从@ company.com帐户创建凭据可以选择仅允许同一组织下的用户,但是没有这样的选项。

因此,我需要获取用户的域或用户的电子邮件地址,以便我可以在渲染开始之前挂接一个方法,然后杀死它或允许它。

我已通过以下服务成功使用了Gmail API:

 service = Google::Apis::GmailV1::GmailService.new

这使我可以通过{p>中的email_address访问用户的电子邮件地址

 service.get_user_profile(user_id)

但这似乎不是一个正确的解决方案,因为当同时有多个用户登录时,它似乎中断了-它一直返回第一个登录用户的电子邮件,而不是刚刚登录的用户的电子邮件

我拒绝相信我是这个星球上第一个需要为需要SSO的人编写门控文档的人,因为他们将不再记得任何密码,但是我真的无法在Google API文档中找到任何相关信息在博客中。

我在另一个SO问题中发现了有关“发送HD参数”(对于托管域)的提及。根据文档https://developers.google.com/identity/protocols/OpenIDConnect#hd-param,当用户从托管域登录时应提供hd。我正在从托管域登录,但是用户凭据user_credentials没有高清字段。

我正在使用以下文档页面中的代码:https://developers.google.com/api-client-library/ruby/guide/aaa_oauth

pastebin中的完整代码很长:https://pastebin.com/rNSe2V48

所以我的问题:如何在Ruby中将Google oAuth限制为具有HD的单个域名?

0 个答案:

没有答案