我正在搞乱WebFinger并尝试创建一个小型rails应用程序,使用户只能使用他们的WebFinger帐户登录。我可以成功地自己动手,然后使用以下代码片段返回一个XRD文件:
Link rel="http://specs.openid.net/auth/2.0/provider" href="http://www.google.com/profiles/{redacted}"/
对我来说,“我在网址上有一个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”替换个人资料网址时,登录效果非常好。
这是我正在使用的代码(我使用RedFinger作为插件,而JanRain的ruby-openid,没有宝石安装)
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收到的网址使用OpenID登录?
答案 0 :(得分:2)
是的,绝对的。虽然我还没有发布源代码,但你可以在webfinger.org上测试一下。实现基本上与您描述的一样。不幸的是,我不确定为什么你的登录示例不起作用。