Sha256: ade89582009d8ee23cc7f42d6021bd07985bdb6898f145abd67255db8da397fa
Contents?: true
Size: 1.48 KB
Versions: 2
Compression:
Stored size: 1.48 KB
Contents
require "jwt" require "json/jwt" require "rest-client" module ServerlessHub class AuthorizerTokenDecoder def initialize(app) @app = app end def call(env) if env["HTTP_AUTHORIZATION"] tokens = decoded_token(env["HTTP_AUTHORIZATION"]) if tokens.present? claims = tokens[0] env["lambda.event"]["requestContext"]["authorizer"] = { "principalId" => claims["sub"], "claims" => claims, } end end return @app.call(env) end def self.jwks RestClient.get(ENV["JWKS_URL"] || "") end private def decoded_token(token) token = token.strip if token.include? ' ' token = token.split(" ").last end decoded = JWT.decode token, jwk_set.first.to_key, false, { algorithm: "RS256" } key_id = decoded[1]['kid'] key = jwk_set.find { |key_obj| key_obj['kid'] == key_id } if key == nil return "" end JWT.decode token, key.to_key, true, { algorithm: "RS256" } rescue "" end def jwk_set @jwk_set ||= JSON::JWK::Set.new( JSON.parse( AuthorizerTokenDecoder.jwks ) ) end end class Authorizer def initialize(app) @app = app end def call(env) if env["lambda.event"] && env["lambda.event"]["requestContext"] env["authorizer"] = env["lambda.event"]["requestContext"]["authorizer"] end return @app.call(env) end end end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
serverless_hub-1.1.1 | lib/serverless_hub/authorizer.rb |
m_serverless_hub-0.0.1 | lib/serverless_hub/authorizer.rb |