Вход с помощью WebFinger и OpenID - PullRequest
       64

Вход с помощью WebFinger и OpenID

2 голосов
/ 05 апреля 2010

Я возиться с WebFinger и пытаюсь создать небольшое приложение для рельсов, которое позволяет пользователю входить в систему, используя только свою учетную запись WebFinger. Я могу успешно перебрать себя и получить обратно файл XRD со следующим фрагментом:

Link rel="http://specs.openid.net/auth/2.0/provider" href="http://www.google.com/profiles/{redacted}"/

Что для меня гласит: «У меня есть логин OpenID 2.0 по URL: http://www.google.com/profiles/{redacted}». Но когда я пытаюсь использовать этот URL для входа в систему, я получаю следующую ошибку

OpenID::DiscoveryFailure (Failed to fetch identity URL http://www.google.com/profiles/{redacted} : Error encountered in redirect from http://www.google.com/profiles/{redacted}: Error fetching /profiles/{Redacted}: Connection refused - connect(2)):

Когда я заменяю URL профиля на 'https://www.google.com/accounts/o8/id',, логин работает отлично.

вот код, который я использую (я использую RedFinger в качестве плагина, и ruR-openid от JanRain, установленный без гема)

require "openid"
require 'openid/store/filesystem.rb'

class SessionsController < ApplicationController
  def new
    @session = Session.new
    #render a textbox requesting a webfinger address, and a submit button
  end

  def create
#######################
#
#  Pay Attention to this section right here
#
#######################
    #use given webfinger address to retrieve openid login
    finger = Redfinger.finger(params[:session][:webfinger_address])
    openid_url = finger.open_id.first.to_s
    #openid_url is now: http://www.google.com/profiles/{redacted}

    #Get needed info about the acquired OpenID login
    file_store = OpenID::Store::Filesystem.new("./noncedir/")
    consumer = OpenID::Consumer.new(session,file_store)
    response = consumer.begin(openid_url)  #ERROR HAPPENS HERE

    #send user to OpenID login for verification
    redirect_to response.redirect_url('http://localhost:3000/','http://localhost:3000/sessions/complete')
  end

  def complete
    #interpret return parameters
    file_store = OpenID::Store::Filesystem.new("./noncedir/")
    consumer = OpenID::Consumer.new(session,file_store)
    response = consumer.complete params
    case response.status
    when OpenID::SUCCESS
      session[:openid] = response.identity_url
      #redirect somehwere here
    end
  end
end

Могу ли я использовать URL-адрес, полученный от WebFinger, для входа в систему с помощью OpenID?

1 Ответ

2 голосов
/ 05 апреля 2010

Да, абсолютно. Хотя я еще не выпустил исходный код, вы можете проверить это на webfinger.org. Реализация в основном, как вы описываете. Я не уверен, почему ваш пример входа не работает, к сожалению.

...