使用VCR过滤掉JWT和Bearer令牌

问题描述 投票:2回答:1

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

我正在通过JWT进行身份验证,并希望同时过滤掉JWT请求和返回的承载令牌。

[由于我不知道Google在运行时提供给我的JWT令牌或Bearer令牌,因此我无法使用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)甚至有必要吗?感激不尽!

ruby google-drive-api vcr
1个回答
0
投票

我使用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标头看起来像:

Authorization:
- Bearer <BEARER_TOKEN>

值得注意的假设:

  • 一个HTTP请求应该只包含一个认证头
  • 但是,该标头可能包含多个逗号分隔的身份验证
  • 以上代码仅捕获以'Bearer'开头的身份验证>
  • 您可以针对“轴承”以外的其他类型进行调整
© www.soinside.com 2019 - 2024. All rights reserved.