我正在使用 rails 5.2.4和 ruby 2.5.8
使用设计模型对 jwt 令牌进行gem 敲击的api 身份验证
用于gem rack-attack
此功能
我想实现两个案例,
如果用户通过身份验证,我想限制请求如果用户
通过标头中的给定访问令牌进行身份验证以获取 api 中的资源对象,那么他每小时可以允许 60 个经过身份验证的请求。
Rack::Attack.throttle('login', limit: 60, period: 60.minute) do |req|
begin
# req.params for JSON is not yet available at this step
JSON.parse(req.body.string)['email'] if req.path == '/api/v1/user_token' && req.post?
rescue JSON::ParserError => e
end
end
如果用户未经身份验证,我想允许 2Ban(锁定)请求如果用户未经身份验证,在标头中使用给定的访问令牌获取 api 中的资源对象,然后锁定任何在 5 分钟内生成超过 10 个未经身份验证请求的源 IP 2 小时。
Rack::Attack.blocklist('basic auth crackers') do |req|
Rack::Attack::Allow2Ban.filter(req.ip, :maxretry => 10, :findtime => 5.minute, :bantime => 2.hour) do
# Return true if the authorization header is incorrect
auth = Rack::Auth::Basic::Request.new(req.env)
auth.credentials != [my_username, my_password]
end
end
第一种情况: 在节流代码中,即使用户传递了错误的凭据并且没有获得 JWT 访问令牌,请求也是节流的。如果经过身份验证的用户每小时点击超过 60 个请求,我想限制请求。api详细信息:
POST localhost:3000/api/v1/user_token
request raw JSON body(correct credentials): {"auth": {"email": "sean@public.com", "password": "password"}}
第二种情况:
在 allow2block 代码中,请求用户在标头中将访问令牌传递给 call http://localhost:3000/api/v1/users
。我不知道如何检查用户是否有错误的访问令牌或者他是未经身份验证的。
我第一次使用这个中间件,任何帮助都提前感谢。