class OktaJwtValidation::AuthenticateApiRequest
Attributes
okta_client_id[RW]
okta_domain[RW]
okta_org[RW]
request[RW]
Public Class Methods
new(options)
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 9 def initialize(options) @request = options[:request] @token = nil @okta_org = options[:okta_org] @okta_domain = options[:okta_domain] @okta_client_id = options[:okta_client_id] end
Public Instance Methods
call()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 17 def call authenticate_request end
Private Instance Methods
authenticate_request()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 33 def authenticate_request @token if token_valid? end
cache_key()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 25 def cache_key 'OKTA_PUBLIC_KEYS' end
client_id()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 37 def client_id okta_client_id end
dirty_kid()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 41 def dirty_kid dirty_token.last['kid'] end
dirty_token()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 45 def dirty_token JWT.decode(request_token, nil, false) end
okta_keys()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 49 def okta_keys Rails.cache.fetch(cache_key, expires_in: 1.month) do okta_keys = {} uri = URI("#{site}/oauth2/v1/keys") data = Net::HTTP.get(uri) keys = JSON.parse(data) keys['keys'].each { |k| okta_keys[k['kid']] = k.except('alg') } okta_keys end end
parse_token()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 60 def parse_token JSON::JWT.decode request_token, public_key rescue StandardError JSON::JWT.decode request_token, public_key(true) end
public_key(clear_cache = false)
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 66 def public_key(clear_cache = false) Rails.cache.delete(cache_key) if clear_cache JSON::JWK.new(okta_keys[dirty_kid]) end
request_token()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 71 def request_token @request.headers['Authorization'] end
site()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 29 def site "https://#{okta_org}.#{okta_domain}.com" end
token_valid?()
click to toggle source
# File lib/okta_jwt_validation/authenticate_api_request.rb, line 75 def token_valid? @token = parse_token if @token['iss'] != site || @token['aud'] != client_id || Time.strptime(@token['exp'].to_s, '%s') < Time.now.utc return false else return true end end