Class: Safire::PKCE

Inherits:
Object
  • Object
show all
Defined in:
lib/safire/pkce.rb

Overview

PKCE (Proof Key for Code Exchange) implementation This class generates a code verifier and corresponding code challenge for use in OAuth2 authorization flows. It supports the S256 code challenge method.

Class Method Summary collapse

Class Method Details

.generate_code_challenge(code_verifier) ⇒ String

Generates a code challenge from the given code verifier using SHA256 and base64url encoding (RFC 7636 Section 4.2, S256).

Parameters:

  • code_verifier (String) —

    the code verifier: a String of 43-128 ASCII characters drawn from the RFC 7636 Section 4.1 unreserved set (A-Z, a-z, 0-9, "-", ".", "_", "~")

Returns:

  • (String) —

    the generated code challenge

Raises:

  • (ArgumentError) —

    if the code verifier is not a String, has an invalid length, or contains characters outside the unreserved set



20
21
22
23
24
25
# File 'lib/safire/pkce.rb', line 20

def generate_code_challenge(code_verifier)
  validate_verifier(code_verifier)

  digest = Digest::SHA256.digest(code_verifier)
  Base64.urlsafe_encode64(digest).tr('=', '')
end

.generate_code_verifier ⇒ Object



8
9
10
11
# File 'lib/safire/pkce.rb', line 8

def generate_code_verifier
  # Using 96 bytes will produce a 128-character URL-safe base64 string which is the max length allowed
  SecureRandom.urlsafe_base64(96).tr('=', '')
end