我正在为公司开发一个Flask应用程序(Python3 / Heroku),并成功实现了基于brijieshb42的文章使用requests_oauthlib的Google登录(Oauth2)。
研究表明,如果在授权URL中传递参数“hd”(托管域),它应该能起作用。例如:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=OUR_CLIENT_ID&redirect_uri=https%3A%2F%2FOUR_APP.herokuapp.com%2Fconnect&scope=profile+email&state=STATE&hd=our_google_apps_domain.com&access_type=offline
据我理解,该参数应该提供客户端限制,并且仅允许从我们的Google应用程序域中的电子邮件进行登录(服务器端在此之后处理!)基于Google文档, 这个邮件列表帖子以及这些stackoverflow 帖子:post1, post2。
然而,尽管我的代码生成了上面粘贴的授权URL,但我仍然可以使用我的个人Gmail帐户(@gmail.com与@our apps domain.com不同)登录。
有人能解释一下为什么这不起作用吗?或者提供一个不同的方法?基本上希望防止非员工登录。
如果需要,我可以分享代码,但基本上是从brijeshb42文章中复制的,看起来像这样:
OAuth2Session(
OUR_CLIENT_ID,
redirect_uri=https://OUR_APP.herokuapp.com/connect,
scope=['profile', 'email']).authorization_url(
https://accounts.google.com/o/oauth2/auth,
hd='our_google_apps_domain.com',
access_type='offline')
返回我上面粘贴的认证URL!
google = get_google_auth(token=token) resp = google.get(Auth.USER_INFO) if resp.status_code == 200: user_data = resp.json() email = user_data['email']
- danchow