我很难让它工作,所以我创建了一个 hell 世界的 Rails 应用程序来尝试让它工作。
这是代码无效的代码库:https://github.com/pitosalas/shibtry
这是我从一个空的 Rails 应用程序开始所做的:
我在 gem 文件中添加了两个 gem:
gem 'omniauth-shibboleth' gem 'rack-saml'
我从我大学的网站上获取了 shibboleth 元数据,并使用 shib_conv.rb 将其转换为相应的 YAML:./config.yml
我更新了路由,将
get '/auth/:provider/callback', to: 'sessions#create'
我在
SessionController#create
下了一个断点
我添加了初始值设定项:omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do provider :shibboleth, { :shib_session_id_field => "Shib-Session-ID", :shib_application_id_field => "Shib-Application-ID", :debug => true, :extra_fields => [ :"unscoped-affiliation", :entitlement ] } end
我添加了 rack_sam.rb 初始值设定项:
Rails.application.config.middleware.insert_after Rack::ETag, Rack::Saml, { :metadata => "#{Rails.root}/config/metadata.yml"}
现在,运行服务器并转到
http://0.0.0.0:3000/auth/shibboleth
,我收到一个错误:undefined method `[]' for nil:NilClass'
可以追溯到 rack-saml/misc/onelogin_setting.rb 第 13 行中的这一行:
settings.idp_sso_target_url = @metadata['saml2_http_redirect']
换句话说,寻找该键的元数据散列。碰巧在我的 metadata.yml 文件中存在该 key ,但是当我到达这个 onelogin_setting.rb 第 13 行时,
@metadata
为 nil(它应该包含文件的内容)并且因此该 key 不存在。
现在,这就是踪迹枯竭的地方。
最佳答案
我完全绕过了 Shibboleth。我的目标是允许登录到我的大学身份验证系统,特别是允许学生使用他们的学生登录名登录,该系统由谷歌应用程序提供。所以这要容易得多:https://developers.google.com/identity/sign-in/web/
关于ruby - Rails 中的 Shibboleth 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115688/