Как отключить обнаружение и указать сервер OpenID для omniauth-openid

Я пытаюсь использовать OmniAuth OpenID с Google Apps в Ruby on Rails. Я знаю, что он должен работать "из коробки", если я укажу ": identifier => 'https://www.google.com/accounts/o8/site-xrds?hd=example.com'" где example.com это домен, из которого происходят мои целевые пользователи.

Пользователь может без проблем перенаправляться в Google при доступе к / auth / google, и этот openid.identity может быть возвращен из Google:

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

Однако на сайте example.com, с которым я работаю, нет правильных тегов "rel = 'openid2.provider'" ‹link /›, настроенных в http://example.com/, поэтому обнаружение не удается, когда omniauth-openid снова пытается связаться с Google.

Есть ли быстрый и понятный способ обойти поведение обнаружения по умолчанию, чтобы я мог определить https://www.google.com/a/example.com/o8/ud?be=o8 в качестве сервера напрямую без выполнения автоматического обнаружения?

Спасибо!


person jiehanzheng    schedule 10.08.2012    source источник


Ответы (2)


Я думаю, что omniauth-openid использует ruby-openid. Если это так, вы легко сможете заставить его работать:

gem install ruby-openid-apps-discovery

Затем закидывайте куда-нибудь, прежде чем делать запрос

require 'gapps_openid'

У Google Apps немного другой протокол обнаружения, и это то, что предоставляет этот драгоценный камень.

person Steve Bazyl    schedule 17.08.2012
comment
Спасибо! Это именно то, что я хочу. - person jiehanzheng; 20.08.2012

Перед использованием драгоценного камня, который рекомендовал Стив, я придумал обходной путь, чтобы весь процесс обнаружения происходил только локально, что, на мой взгляд, может быть полезно для некоторых людей. Если вы принимаете пользователей только из одного домена Google Apps, вы можете:

  1. Добавьте строку типа 127.0.0.1 example.com в файл / etc / hosts.

  2. настройте легкий HTTP-сервер, такой как nginx, создайте файл с именем openid (не добавляйте .html) и добавьте туда свой тег ‹link rel =" openid2.provider "...›.

Это немного быстрее, чем использование ruby-openid-apps-discovery, поскольку оно избавляет ваше приложение от отправки некоторых запросов на внешний https-сервер.

person jiehanzheng    schedule 20.08.2012