0

我正在尝试在 Ruby on Rails 中使用 Google Apps 执行 OmniAuth OpenID。我知道如果我指定 ":identifier => 'https://www.google.com/accounts/o8/site-xrds?hd=example.com'" 其中 example.com 它应该开箱即用是我的目标用户来自的域。

用户在访问 /auth/google 时可以毫无问题地被重定向到谷歌,并且这个 openid.identity 可以从谷歌返回:

... &openid.identity=http://example.com/openid?id=xxxxxxxxxxxxxxxxxxxxxxx ...

但是,我正在使用的 example.com 没有在http://example.com/上设置正确的 "rel='openid2.provider'" <link /> 标签,因此当 omniauth-openid 尝试时发现失败再次与谷歌核实。

是否有一种快速而干净的方法来解决默认发现行为,以便我可以直接将https://www.google.com/a/example.com/o8/ud?be=o8定义为服务器而不执行自动发现?

谢谢!

4

2 回答 2

0

在使用 Steve 推荐的 gem 之前,我想出了一个解决方法,使整个发现过程仅在本地发生,我发现这可能对某些人有用。如果您只接受来自单个 Google Apps 域的用户,您可能希望:

  1. 127.0.0.1 example.com在 /etc/hosts 中添加一行。

  2. 设置一个像 nginx 这样的轻量级 HTTP 服务器,创建一个名为openid(不要附加 .html)的文件,并在那里添加你的 <link rel="openid2.provider" ... > 标签。

这比使用 ruby​​-openid-apps-discovery 稍微快一些,因为它可以避免您的应用程序向外部 https 服务器发送一些请求。

于 2012-08-20T07:20:57.647 回答
0

我认为omniauth-openid 使用ruby-openid。如果是这样,您应该能够轻松地使其工作:

gem install ruby-openid-apps-discovery

然后在提出请求之前投入某个地方

require 'gapps_openid'

Google Apps 的发现协议略有不同,这正是 gem 提供的。

于 2012-08-17T23:31:46.477 回答