ruby-on-rails - rails saml如何解密xml?

标签 ruby-on-rails xml ruby-on-rails-4 encryption saml

我正在执行 SAML 身份验证,当我收到 xml 时,其中的一部分已加密。这是我需要的部分(包含姓名、电子邮件等)

为此我有一个私钥来解密它,但我不知道该怎么做。

我在这里:

    response  =  OneLogin::RubySaml::Response.new(params[:SAMLResponse])
    response.settings = set_settings
    doc = Nokogiri::XML(response.response)
    document = XMLSecurity::Document.new(doc)
    ### NOT USED HERE
    formated_cert = OneLogin::RubySaml::Utils.format_cert(CONFIG_CERTIFICATE)
    cert = OpenSSL::X509::Certificate.new(formated_cert)
    formated_private_key = OneLogin::RubySaml::Utils.format_private_key(CONFIG_PRIVATE_KEY)
    private_key = OpenSSL::PKey::RSA.new(formated_private_key)
    ### NOT USED HERE
   ret = doument.decrypt!(settings) rescue nil # PROBLEME HERE, DONT WORK


 def set_settings
  settings = OneLogin::RubySaml::Settings.new
  ...
 settings.security[:digest_method]    = XMLSecurity::Document::SHA1
 settings.security[:signature_method] = XMLSecurity::Document::SHA1   
  ...
  settings.certificate = CONFIG_CERTIFICATE
  settings.private_key = CONFIG_PRIVATE_KEY

end

因此,ret 应该是我可以使用的解密 xml,但它始终停留在 nil(rescue nil,避免 500)

我使用 OneLogin::RubySamlXMLSecurity

但我不知道我做错了什么,

有人吗?

最佳答案

最后,我成功解决了这个问题: 这里的解决方案:

  response.settings = saml_settings

  enc_key = REXML::XPath.first(response.document, "//xenc:EncryptedKey//xenc:CipherData/xenc:CipherValue").text
  enc_value = REXML::XPath.first(response.document, "//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue").text
  private_key = OpenSSL::PKey::RSA.new(CONFIG_PRIVATE_KEY)
  data_key = private_key.private_decrypt(Base64.decode64(enc_key), OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING)

  actual_output = decrypt_cipher_data(data_key, enc_value)


 clean_output = actual_output.slice(0..(actual_output.index('</Assertion>') + '</Assertion>'.length-1))

所以clean_output就是最终解密的xml,可以使用了

关于ruby-on-rails - rails saml如何解密xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30457506/

相关文章:

ruby-on-rails - 运行 Guard 进程时出错 : can't find singularize method

xml - 通过 Xquery 将 XML 中的数据转换为文本

c# - 将部分xml反序列化为字符串

ruby-on-rails - 找不到托盘, 'id' =

ruby-on-rails - 在 Rails 4 上注册多个 before_save 条件回调

mysql - 使用 ActiveRecord 连接到外部 MySQL 服务器以获取 heroku 上的旧数据

ruby-on-rails - will_paginate -error-undefined 方法 `total_pages'

ruby-on-rails - 在 Ruby 中调用没有模块名称的模块类方法

JavaScript 无法使用 Safari 加载到生产网站上

xml - 如何使用 shell 脚本读取 XML 并写入文本文件?