2

我正在搞乱 WebFinger 并尝试创建一个小型 Rails 应用程序,使用户能够使用 WebFinger 帐户登录。我可以成功地找到自己,然后我得到一个带有以下片段的 XRD 文件:

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

对我来说,上面写着“我在 url 上有一个 OpenID 2.0 登录名: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)):

当我用“ https://www.google.com/accounts/o8/id ”替换个人资料 URL 时,登录效果很好。

这是我正在使用的代码(我使用 RedFinger 作为插件,以及 JanRain 的 ruby​​-openid,在没有 gem 的情况下安装)

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

我可以使用从 WebFinger 收到的 URL 来使用 OpenID 登录吗?

4

1 回答 1

2

是的,一点没错。虽然我还没有发布源代码(还),但您可以在 webfinger.org 上进行测试。实现基本上如您所描述。不幸的是,我不确定为什么您的登录示例不起作用。

于 2010-04-05T17:08:57.660 回答