Class: Himari::Services::OidcTokenEndpoint
- Inherits:
-
Object
- Object
- Himari::Services::OidcTokenEndpoint
- Defined in:
- lib/himari/services/oidc_token_endpoint.rb
Defined Under Namespace
Classes: Issued, SigningKeyMissing
Instance Method Summary collapse
- #app(env) ⇒ Object
- #call(env) ⇒ Object
-
#initialize(client_provider:, signing_key_provider:, storage:, issuer:, logger: nil) ⇒ OidcTokenEndpoint
constructor
A new instance of OidcTokenEndpoint.
Constructor Details
#initialize(client_provider:, signing_key_provider:, storage:, issuer:, logger: nil) ⇒ OidcTokenEndpoint
Returns a new instance of OidcTokenEndpoint.
25 26 27 28 29 30 31 |
# File 'lib/himari/services/oidc_token_endpoint.rb', line 25 def initialize(client_provider:, signing_key_provider:, storage:, issuer:, logger: nil) @client_provider = client_provider @signing_key_provider = signing_key_provider @storage = storage @issuer = issuer @logger = logger end |
Instance Method Details
#app(env) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/himari/services/oidc_token_endpoint.rb', line 40 def app(env) Rack::OAuth2::Server::Token.new do |req, res| client = @client_provider.find(id: req.client_id) unless client @logger&.warn(Himari::LogLine.new('OidcTokenEndpoint: invalid_client, no client registration', req: env['himari.request_as_log'], client_id: req.client_id)) next req.invalid_client! end # Public clients (token_endpoint_auth_method=none) present no secret; they are bound # to the authorization code by PKCE and the client_id check in handle_authorization_code. if client.confidential? && !client.match_secret?(req.client_secret) @logger&.warn(Himari::LogLine.new('OidcTokenEndpoint: invalid_client, client secret mismatch', req: env['himari.request_as_log'], client: client.as_log)) next req.invalid_client! end case req.grant_type when :authorization_code (env, req, res, client) when :refresh_token handle_refresh_token(env, req, res, client) else req.unsupported_response_type! end end end |
#call(env) ⇒ Object
33 34 35 36 37 38 |
# File 'lib/himari/services/oidc_token_endpoint.rb', line 33 def call(env) app(env).call(env) rescue Rack::OAuth2::Server::Abstract::Error => e @logger&.warn(Himari::LogLine.new('OidcTokenEndpoint: returning error', req: env['himari.request_as_log'], err: e.class.inspect, err_content: e.protocol_params)) e.finish end |