0

尝试按照此处的设置创建一个简单的 SAML 应用程序(我在这里获得的完整项目)。

我完成了设置

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'

(注意:错误是第 5行,由于我添加了调试日志记录,它对我来说是第 9 行)我不太确定它还能是什么,不确定它找不到什么方法以及什么是 nil?

我从来没有弄乱过 ruby​​ 的东西,但是从我最初的样子来看,我不确定 nil 是从哪里来的,日志显示正在创建的请求所以不确定。任何帮助将不胜感激,谢谢!

4

2 回答 2

0

在这里发布答案,原来我正在使用 OKTA_METADATA 环境变量的元数据 url。

必须将 settings = idp_metadata_parser.parse(ENV['OKTA_METADATA']) 修改为 settings = idp_metadata_parser.parse_remote(ENV['OKTA_METADATA']) 其中 OKTA_METADATA= http://blahblahblah.com/metadata

于 2018-02-14T01:01:38.640 回答
0

首先,我认为您使用的是相当旧的 ruby​​-saml gem 版本。这可能是问题所在。

我还没有测试过你的代码,但在我看来你忘记idp_sso_target_url在你的设置中进行设置,显然这是它可以抛出你得到的异常的唯一地方。https://github.com/onelogin/ruby-saml/blob/v1.1.2/lib/onelogin/ruby-saml/authrequest.rb#L39

于 2018-02-13T18:06:28.777 回答