2012-01-24 71 views
6

我想在客户的应用程序中实现单点登录。该客户已通过Google Apps托管电子邮件。由于Google提供OpenID,这可能相对容易实施。但是,用户可能未登录正确的Google帐户(甚至是多个帐户)。如何将Google联合登录限制到特定的应用程序域?

因此,当使用Google OpenID端点https://www.google.com/accounts/o8/id时,用户将看到他/她希望登录哪个Google帐户的选项。由于该应用程序只允许Google Apps域中的登录,因此可跳过此步骤,以增加用户体验。但是,我可以找到办法做到这一点。 SO上有this question,但链接全部死亡或指过时的规格。此外,我无法在Federated Login for Google Account Users规格中找到提示。

有些地方说,应该使用https://www.google.com/a/[domain]/o8/ud?be=o8,但似乎不工作(再):

$ wget --header='Accept: application/xrds+xml' https://www.google.com/a/[domain]/o8/ud?be=o8 
2012-01-24 09:29:53 ERROR 400: Bad Request. 

回答

6

虽然我找不到官方记录,终点为特定的谷歌Apps域名是这个:

https://google.com/accounts/o8/site-xrds?hd=<domain> 

使用此方法时,要知道,你会碰到一个特定的谷歌修饰:

谷歌改变了IdP Discovery和用户XRDS的检查方式,让Google Apps用户在http://example.com/openid?id=108441225163454056756的openid格式下不需要用户建立自己的openid服务器。对于小公司来说,如果他们使用Google Apps,那么人们可以在他们的域名中获得他们的openid,只有一个域名。 source

+0

这对我来说不适用于GAE下使用python和users.create_login_url()与上述url作为federated_identity参数。有其他人试过吗? –

+0

单独提出这个问题[这里](http://stackoverflow.com/questions/14637137/how-to-restrict-openid-login-to-one-google-apps-domain-on-gae-again) –

相关问题