使用 VCR 过滤掉 JWT 和 Bearer 令牌
Filtering out JWT and Bearer tokens with VCR
我正在使用 Google Drive API 通过 Google Drive Ruby gem and using 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)这甚至是必要的吗?想法赞赏!
我用 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 可能包含多个 comma-separated 授权
- 以上代码只获取以'Bearer'
开头的auth
- 您可以针对 'Bearer'
以外的其他类型进行调整
我正在使用 Google Drive API 通过 Google Drive Ruby gem and using 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)这甚至是必要的吗?想法赞赏!
我用 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 可能包含多个 comma-separated 授权
- 以上代码只获取以'Bearer' 开头的auth
- 您可以针对 'Bearer' 以外的其他类型进行调整