我正在通过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)这甚至是必要的吗?赞赏的想法!
答案 0 :(得分:1)
我使用了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>
值得注意的假设: