尝试按照设置here创建一个简单的SAML应用程序(我得到的完整项目here)。
我经历了设置
bundle install
rails s
这很好,但是当我导航到 http://localhost:3000/ 我受到了打击
NoMethodError in SamlController#init
undefined method `+' for nil:NilClass
Extracted source (around line #9):
def init
request = OneLogin::RubySaml::Authrequest.new
direct_to(request.create(saml_settings))
end
def consume
我添加了一些日志记录来检查请求和saml_settings的nil状态,但这两个似乎都返回false
puts request.nil?
puts saml_settings.nil?
错误追踪:
Processing by SamlController#init as HTML
false
false
Created AuthnRequest: <samlp:AuthnRequest AssertionConsumerServiceURL='http://localhost:3000/saml/consume' ID='_394fa0a0-f313-0135-85a4-6a0001e18280' IssueInstant='2018-02-13T17:42:45Z' Version='2.0' xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion' xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol'><saml:Issuer>http://localhost:3000/saml/consume</saml:Issuer></samlp:AuthnRequest>
Completed 500 Internal Server Error in 15ms (ActiveRecord: 0.0ms)
NoMethodError (undefined method `+' for nil:NilClass):
app/controllers/saml_controller.rb:9:in `init'
(注意:the error is line 5,因为我添加了调试日志记录,因此我说第9行) 我不太确定它还能做什么,不确定它找不到什么方法,什么是零?
我从来没有搞过红宝石的东西,但从我最初的看起来我不确定nil来自哪里,日志显示创建的请求所以不确定。任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
首先,我认为你正在使用一个非常古老的ruby-saml宝石版本。这可能是问题所在。
我还没有测试过您的代码,但在我看来,您忘记在设置中设置idp_sso_target_url
,显然这是唯一可以抛出异常的地方。 https://github.com/onelogin/ruby-saml/blob/v1.1.2/lib/onelogin/ruby-saml/authrequest.rb#L39
答案 1 :(得分:0)
在这里发布答案,结果是我正在使用OKTA_METADATA环境变量的元数据网址。
不得不修改 settings = idp_metadata_parser.parse(ENV [&#39; OKTA_METADATA&#39;]) 至 settings = idp_metadata_parser.parse_remote(ENV [&#39; OKTA_METADATA&#39;]) 哪里 OKTA_METADATA = http://blahblahblah.com/metadata