ruby - 使用 VCR 过滤掉 JWT 和 Bearer token

标签 ruby google-drive-api vcr

我正在通过 Google Drive Ruby gem 使用 Google Drive API并使用 VCR记录请求。

我正在后台通过 JWT 进行身份验证,并希望过滤掉 JWT 请求和返回的不记名 token 。

因为我不知道 Google 在运行时给我的 JWT token 或 Bearer token ,所以我无法使用 filter_sensitive_data。结果,为了清理我的磁带,我在测试运行后得到了以下乱七八糟的代码来过滤:

after(:each) do |example|
  # Filter out JWT and bearer tokens from requests
  if VCR.current_cassette.recording?
    interactions = VCR.current_cassette.new_recorded_interactions
    # Remove JWT token
    interactions.first.request.body.gsub! /(?<=assertion\=).*/, '<JWT_TOKEN>'
    # Get and replace access token from body
    body = JSON.parse(interactions.first.response.body)
    access_token = body['access_token']
    body['access_token'] = '<ACCESS_TOKEN>'
    interactions.first.response.body = body.to_json
    # Replace access token in each auth request
    interactions.drop(1).each do |i|
      i.request.headers['Authorization'][0].gsub!(access_token, '<BEARER_TOKEN>')
    end
  end
end

我的问题实际上是两个合作伙伴 - 1) 是否有另一种方法可以做到这一点?; 2)这甚至是必要的吗?想法赞赏!

最佳答案

我使用 filter_sensitive_data 并想出了这个:

VCR.configure do |config|
  config.filter_sensitive_data('<BEARER_TOKEN>') { |interaction|
    auths = interaction.request.headers['Authorization'].first
    if (match = auths.match /^Bearer\s+([^,\s]+)/ )
      match.captures.first
    end
  }
end

当我测试时,盒式磁带内的 auth header 如下所示:

Authorization:
- Bearer <BEARER_TOKEN>

值得注意的假设:

  • 一个 HTTP 请求应该只包含一个授权 header
  • 但是,该 header 可能包含多个以逗号分隔的身份验证
  • 以上代码只获取以'Bearer'开头的授权
  • 您可以针对“Bearer”以外的其他类型进行调整

关于ruby - 使用 VCR 过滤掉 JWT 和 Bearer token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46644931/

相关文章:

ruby - XPath 选择带句点的节点

c# - Drive.API.v3 不同账户用户名/密码认证

ios - 使用 Google Sign In 实现 Google Drive API - iOS

ruby-on-rails - VCR::Errors::UnhandledHTTPRequestError 在使用 VCR 的 Controller 测试中

ruby-on-rails - 使用 VCR 运行规范,无需明确指定磁带名称

ruby-on-rails - 如何在ruby vcr中记录HTTP交互?

ruby-on-rails - Ruby/Rails : Prepend, 将代码附加到所有方法

ruby - 如何将 stderr 和 stdout 重定向到 Ruby 脚本文件?

ruby-on-rails - 修剪字符尾随的零 n 轨

python - 如何查找 Google Drive 文件夹中的内容是否已更改