authproto 0.3.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +1 -0
- data/.rubocop.yml +31 -0
- data/.tm_properties +1 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +52 -0
- data/MIT-LICENSE.txt +21 -0
- data/README.md +304 -0
- data/Rakefile +8 -0
- data/SECURITY.md +16 -0
- data/examples/confidential_client/.gitignore +5 -0
- data/examples/confidential_client/Gemfile +14 -0
- data/examples/confidential_client/Gemfile.lock +88 -0
- data/examples/confidential_client/README.md +226 -0
- data/examples/confidential_client/app.rb +290 -0
- data/examples/confidential_client/config/client-metadata.example.json +25 -0
- data/examples/confidential_client/config.ru +4 -0
- data/examples/confidential_client/public/styles.css +70 -0
- data/examples/confidential_client/screenshots/screenshot-1-sign-in.png +0 -0
- data/examples/confidential_client/screenshots/screenshot-2-success.png +0 -0
- data/examples/confidential_client/scripts/generate_keys.rb +15 -0
- data/examples/confidential_client/views/authorized.erb +46 -0
- data/examples/confidential_client/views/index.erb +44 -0
- data/examples/confidential_client/views/layout.erb +11 -0
- data/examples/minisky_console/.gitignore +2 -0
- data/examples/minisky_console/Gemfile +12 -0
- data/examples/minisky_console/Gemfile.lock +131 -0
- data/examples/minisky_console/README.md +112 -0
- data/examples/minisky_console/app.rb +50 -0
- data/examples/minisky_console/bin/console +6 -0
- data/examples/minisky_console/config.ru +5 -0
- data/examples/minisky_console/localhost.rb +53 -0
- data/examples/minisky_console/production.rb +32 -0
- data/lib/authproto/client.rb +583 -0
- data/lib/authproto/client_metadata.rb +478 -0
- data/lib/authproto/configuration.rb +139 -0
- data/lib/authproto/dpop/client.rb +161 -0
- data/lib/authproto/dpop/key_manager.rb +223 -0
- data/lib/authproto/dpop/nonce_manager.rb +145 -0
- data/lib/authproto/dpop/proof_generator.rb +124 -0
- data/lib/authproto/dpop/stored_nonce.rb +37 -0
- data/lib/authproto/encryption.rb +250 -0
- data/lib/authproto/errors.rb +75 -0
- data/lib/authproto/http_client.rb +320 -0
- data/lib/authproto/insecure_http_client.rb +24 -0
- data/lib/authproto/localhost_server.rb +274 -0
- data/lib/authproto/minisky.rb +273 -0
- data/lib/authproto/par/client.rb +240 -0
- data/lib/authproto/par/client_assertion.rb +69 -0
- data/lib/authproto/par/request.rb +243 -0
- data/lib/authproto/par/response.rb +43 -0
- data/lib/authproto/par.rb +48 -0
- data/lib/authproto/pkce.rb +125 -0
- data/lib/authproto/serialization/base.rb +258 -0
- data/lib/authproto/serialization/dpop_key.rb +38 -0
- data/lib/authproto/serialization/session.rb +88 -0
- data/lib/authproto/serialization/stored_nonce.rb +46 -0
- data/lib/authproto/serialization/token_set.rb +54 -0
- data/lib/authproto/server_metadata/authorization_server.rb +267 -0
- data/lib/authproto/server_metadata/origin_url.rb +71 -0
- data/lib/authproto/server_metadata/resource_server.rb +98 -0
- data/lib/authproto/server_metadata.rb +28 -0
- data/lib/authproto/state/session.rb +168 -0
- data/lib/authproto/state/session_manager.rb +162 -0
- data/lib/authproto/state/token_set.rb +101 -0
- data/lib/authproto/state.rb +61 -0
- data/lib/authproto/storage/interface.rb +121 -0
- data/lib/authproto/storage/key_builder.rb +76 -0
- data/lib/authproto/storage/memory.rb +222 -0
- data/lib/authproto/storage/redis.rb +156 -0
- data/lib/authproto/storage/sqlite.rb +281 -0
- data/lib/authproto/token/refresh.rb +414 -0
- data/lib/authproto/version.rb +8 -0
- data/lib/authproto.rb +18 -0
- data/sig/authproto/client.rbs +43 -0
- data/sig/authproto/client_metadata.rbs +113 -0
- data/sig/authproto/dependencies.rbs +19 -0
- data/sig/authproto/dpop/client.rbs +23 -0
- data/sig/authproto/dpop/key_manager.rbs +26 -0
- data/sig/authproto/dpop/nonce_manager.rbs +23 -0
- data/sig/authproto/dpop/proof_generator.rbs +40 -0
- data/sig/authproto/dpop/stored_nonce.rbs +10 -0
- data/sig/authproto/encryption.rbs +42 -0
- data/sig/authproto/http_client.rbs +45 -0
- data/sig/authproto/insecure_http_client.rbs +8 -0
- data/sig/authproto/localhost_server.rbs +30 -0
- data/sig/authproto/minisky_oauth.rbs +22 -0
- data/sig/authproto/par/client.rbs +25 -0
- data/sig/authproto/par/client_assertion.rbs +10 -0
- data/sig/authproto/par/request.rbs +73 -0
- data/sig/authproto/par/response.rbs +17 -0
- data/sig/authproto/par.rbs +7 -0
- data/sig/authproto/pkce.rbs +24 -0
- data/sig/authproto/serialization/base.rbs +36 -0
- data/sig/authproto/serialization/dpop_key.rbs +14 -0
- data/sig/authproto/serialization/session.rbs +19 -0
- data/sig/authproto/serialization/stored_nonce.rbs +14 -0
- data/sig/authproto/serialization/token_set.rbs +14 -0
- data/sig/authproto/server_metadata/authorization_server.rbs +71 -0
- data/sig/authproto/server_metadata/origin_url.rbs +21 -0
- data/sig/authproto/server_metadata/resource_server.rbs +27 -0
- data/sig/authproto/state/session.rbs +28 -0
- data/sig/authproto/state/session_manager.rbs +15 -0
- data/sig/authproto/state/token_set.rbs +40 -0
- data/sig/authproto/state.rbs +6 -0
- data/sig/authproto/storage/interface.rbs +20 -0
- data/sig/authproto/storage/key_builder.rbs +16 -0
- data/sig/authproto/storage/memory.rbs +22 -0
- data/sig/authproto/storage/redis.rbs +19 -0
- data/sig/authproto/storage/redis_client.rbs +11 -0
- data/sig/authproto/storage/sqlite.rbs +26 -0
- data/sig/authproto/token/refresh.rbs +47 -0
- data/sig/authproto/version.rbs +3 -0
- data/sig/authproto.rbs +54 -0
- metadata +200 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module AuthProto
|
|
2
|
+
module State
|
|
3
|
+
class TokenSet
|
|
4
|
+
@access_token: String
|
|
5
|
+
@refresh_token: String?
|
|
6
|
+
@token_type: String
|
|
7
|
+
@scope: String
|
|
8
|
+
@sub: String
|
|
9
|
+
@expires_at: Time
|
|
10
|
+
|
|
11
|
+
attr_reader access_token: String
|
|
12
|
+
attr_reader refresh_token: String?
|
|
13
|
+
attr_reader token_type: String
|
|
14
|
+
attr_reader scope: String
|
|
15
|
+
attr_reader expires_at: Time
|
|
16
|
+
attr_reader sub: String
|
|
17
|
+
|
|
18
|
+
def initialize: (
|
|
19
|
+
access_token: String,
|
|
20
|
+
token_type: String,
|
|
21
|
+
expires_in: Integer,
|
|
22
|
+
scope: String,
|
|
23
|
+
sub: String,
|
|
24
|
+
?refresh_token: String?
|
|
25
|
+
) -> void
|
|
26
|
+
|
|
27
|
+
def renewable?: () -> bool
|
|
28
|
+
|
|
29
|
+
def expired?: (?Numeric buffer) -> bool
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def validate_token_type: (String type) -> void
|
|
34
|
+
|
|
35
|
+
def validate_required: (String name, String? value) -> void
|
|
36
|
+
|
|
37
|
+
def validate_expires_in: (Integer expires_in) -> void
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module AuthProto
|
|
2
|
+
module Storage
|
|
3
|
+
class StorageError < AuthProto::Error
|
|
4
|
+
end
|
|
5
|
+
class LockError < StorageError
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class Interface
|
|
9
|
+
def set: (String key, untyped value, ?ttl: Integer?) -> bool
|
|
10
|
+
def get: (String key) -> untyped
|
|
11
|
+
def delete: (String key) -> bool
|
|
12
|
+
def exists?: (String key) -> bool
|
|
13
|
+
def with_lock: [T] (String key, ?ttl: Integer) { () -> T } -> T
|
|
14
|
+
|
|
15
|
+
# Protected in Ruby; RBS exposes protected methods as public.
|
|
16
|
+
def validate_key: (String key) -> void
|
|
17
|
+
def validate_ttl: (Integer? ttl) -> void
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module AuthProto
|
|
2
|
+
module Storage
|
|
3
|
+
class KeyBuilder
|
|
4
|
+
NAMESPACE_SEPARATOR: String
|
|
5
|
+
NAMESPACE_PREFIX: String
|
|
6
|
+
def self.session_key: (String id) -> String
|
|
7
|
+
def self.state_key: (String token) -> String
|
|
8
|
+
def self.nonce_key: (String server_url) -> String
|
|
9
|
+
def self.dpop_key: (String client_id) -> String
|
|
10
|
+
def self.lock_key: (String namespace, String id) -> String
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
private def self.build_key: (*String parts) -> String
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module AuthProto
|
|
2
|
+
module Storage
|
|
3
|
+
class Memory < Interface
|
|
4
|
+
def initialize: () -> void
|
|
5
|
+
def set: (String key, untyped value, ?ttl: Integer?) -> true
|
|
6
|
+
def get: (String key) -> untyped
|
|
7
|
+
def delete: (String key) -> true
|
|
8
|
+
def exists?: (String key) -> bool
|
|
9
|
+
def with_lock: [T] (String key, ?ttl: Integer) { () -> T } -> T
|
|
10
|
+
def clear: () -> void
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
def acquire_lock: (String key, ttl: Integer) -> bool
|
|
14
|
+
def release_lock: (String key) -> true
|
|
15
|
+
def expired?: (String key) -> bool
|
|
16
|
+
def lock_expired?: (String lock_key) -> bool
|
|
17
|
+
def set_expiration: (String key, Integer ttl) -> Integer
|
|
18
|
+
def cleanup_expired: () -> void
|
|
19
|
+
def start_cleanup_thread: () -> Thread
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module AuthProto
|
|
2
|
+
module Storage
|
|
3
|
+
class Redis < Interface
|
|
4
|
+
class RedisError < StorageError
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def initialize: (?redis_client: _RedisClient?) -> void
|
|
8
|
+
def set: (String key, untyped value, ?ttl: Integer?) -> true
|
|
9
|
+
def get: (String key) -> String?
|
|
10
|
+
def delete: (String key) -> bool
|
|
11
|
+
def exists?: (String key) -> bool
|
|
12
|
+
def with_lock: [T] (String key, ?ttl: Integer) { () -> T } -> T
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
def acquire_lock: (String key, ttl: Integer) -> String?
|
|
16
|
+
def release_lock: (String key) -> bool
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module AuthProto
|
|
2
|
+
module Storage
|
|
3
|
+
# Only the Redis client operations required by the optional adapter.
|
|
4
|
+
interface _RedisClient
|
|
5
|
+
def set: (String key, untyped value, ?ex: Integer?, ?nx: bool) -> String?
|
|
6
|
+
def get: (String key) -> String?
|
|
7
|
+
def del: (*String keys) -> Integer
|
|
8
|
+
def exists?: (String key) -> bool
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module AuthProto
|
|
2
|
+
module Storage
|
|
3
|
+
class SQLite < Interface
|
|
4
|
+
class SQLiteError < StorageError
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
DEFAULT_BUSY_TIMEOUT: Integer
|
|
8
|
+
|
|
9
|
+
def initialize: (path: String, ?busy_timeout: Integer) -> void
|
|
10
|
+
def set: (String key, String | Numeric | nil value, ?ttl: Integer?) -> true
|
|
11
|
+
def get: (String key) -> (String | Numeric | nil)
|
|
12
|
+
def delete: (String key) -> bool
|
|
13
|
+
def exists?: (String key) -> bool
|
|
14
|
+
def with_lock: [T] (String key, ?ttl: Integer) { () -> T } -> T
|
|
15
|
+
def close: () -> void
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
def configure_database: () -> void
|
|
19
|
+
def create_schema: () -> void
|
|
20
|
+
def acquire_lock: (String key, ttl: Integer) -> String?
|
|
21
|
+
def release_lock: (String key, String owner) -> bool
|
|
22
|
+
def delete_expired_value: (String key, Float now) -> void
|
|
23
|
+
def current_time: () -> Float
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module AuthProto
|
|
2
|
+
module Token
|
|
3
|
+
class Error < AuthProto::Error
|
|
4
|
+
attr_reader token_type: String
|
|
5
|
+
attr_reader error_code: String
|
|
6
|
+
attr_reader retry_possible: bool
|
|
7
|
+
def initialize: (String message, token_type: String, error_code: String, ?retry_possible: bool) -> void
|
|
8
|
+
end
|
|
9
|
+
class ExpiredTokenError < Error
|
|
10
|
+
def initialize: (token_type: String) -> void
|
|
11
|
+
end
|
|
12
|
+
class InvalidTokenError < Error
|
|
13
|
+
def initialize: (token_type: String) -> void
|
|
14
|
+
end
|
|
15
|
+
class RefreshError < Error
|
|
16
|
+
def initialize: (String message, ?retry_possible: bool) -> void
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Refresh
|
|
20
|
+
include MonitorMixin
|
|
21
|
+
MAX_RETRIES: Integer
|
|
22
|
+
BASE_DELAY: Integer
|
|
23
|
+
MAX_DELAY: Integer
|
|
24
|
+
attr_reader session: State::Session
|
|
25
|
+
attr_reader dpop_client: DPoP::Client
|
|
26
|
+
attr_reader auth_server: ServerMetadata::AuthorizationServer
|
|
27
|
+
attr_reader client_metadata: ClientMetadata
|
|
28
|
+
|
|
29
|
+
def initialize: (session: State::Session, dpop_client: DPoP::Client, auth_server: ServerMetadata::AuthorizationServer, client_metadata: ClientMetadata) -> void
|
|
30
|
+
def perform: () -> State::TokenSet
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
def with_retries: [T] () { () -> T } -> T
|
|
34
|
+
def calculate_delay: () -> Float
|
|
35
|
+
def request_token_refresh: () -> State::TokenSet
|
|
36
|
+
def make_token_request: (State::Session session) -> http_response
|
|
37
|
+
def requires_dpop_nonce?: (http_response response) -> bool
|
|
38
|
+
def extract_dpop_nonce: (http_response response) -> String
|
|
39
|
+
def add_client_authentication: (Hash[Symbol, untyped] body) -> void
|
|
40
|
+
def handle_refresh_response: (http_response response) -> State::TokenSet
|
|
41
|
+
def process_successful_response: (http_response response) -> State::TokenSet
|
|
42
|
+
def handle_400_response: (http_response response) -> bot
|
|
43
|
+
def handle_rate_limit_response: (http_response response) -> bot
|
|
44
|
+
def validate_refresh_response: (json_object data) -> void
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/sig/authproto.rbs
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
interface _HTTPClient
|
|
2
|
+
def get: (String url, ?Hash[String, String] headers, ?follow_redirects: bool) -> AuthProto::http_response
|
|
3
|
+
def post: (String url, ?body: AuthProto::http_body, ?headers: Hash[String, String]) -> AuthProto::http_response
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
module AuthProto
|
|
7
|
+
type json_object = Hash[String, untyped]
|
|
8
|
+
type http_body = String | Hash[untyped, untyped] | nil
|
|
9
|
+
type http_response = { status: Integer, headers: Hash[String, String], body: String? }
|
|
10
|
+
type token_info = { access_token: String, token_type: String, expires_in: Integer, refresh_token: String?, scope: String }
|
|
11
|
+
type refreshed_tokens = { access_token: String, token_type: String, expires_in: Integer, refresh_token: String?, scope: String, session_id: String }
|
|
12
|
+
type callback_result = { access_token: String, token_type: String, expires_in: Integer, refresh_token: String?, scope: String, session_id: String, did: String }
|
|
13
|
+
type authorization_result = { url: String, session_id: String }
|
|
14
|
+
|
|
15
|
+
class Error < StandardError
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class OAuthError < Error
|
|
19
|
+
attr_reader error_code: String
|
|
20
|
+
def initialize: (String message, String error_code) -> void
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class InvalidClientMetadata < OAuthError
|
|
24
|
+
def initialize: (String message) -> void
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class InvalidAuthorizationServer < OAuthError
|
|
28
|
+
def initialize: (String message) -> void
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class ConfigurationError < Error
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class Configuration
|
|
35
|
+
attr_accessor default_token_lifetime: Integer
|
|
36
|
+
attr_accessor dpop_nonce_lifetime: Integer
|
|
37
|
+
attr_accessor encryption: untyped
|
|
38
|
+
attr_accessor http_client: _HTTPClient?
|
|
39
|
+
attr_accessor logger: Logger
|
|
40
|
+
attr_accessor storage: Storage::Interface
|
|
41
|
+
def initialize: () -> void
|
|
42
|
+
def validate: () -> true
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
def validate_storage: () -> void
|
|
46
|
+
def validate_http_client: () -> void
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
attr_writer self.configuration: Configuration
|
|
50
|
+
def self.configuration: () -> Configuration
|
|
51
|
+
def self.configure: () { (Configuration) -> untyped } -> Configuration
|
|
52
|
+
def self.storage: () -> Storage::Interface
|
|
53
|
+
def self.reset_configuration: () -> Configuration
|
|
54
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: authproto
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.3.0.beta1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Josh Huckabee
|
|
8
|
+
- Kuba Suder
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: jose
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.2'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.2'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: jwt
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '3.3'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '3.3'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: didkit
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 0.5.0
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 0.5.0
|
|
55
|
+
description: A Ruby library for implementing AT Protocol OAuth flows, including DPoP,
|
|
56
|
+
PAR, and dynamic client registration. Supports both client and server-side implementations
|
|
57
|
+
with comprehensive security features.
|
|
58
|
+
executables: []
|
|
59
|
+
extensions: []
|
|
60
|
+
extra_rdoc_files: []
|
|
61
|
+
files:
|
|
62
|
+
- ".rspec"
|
|
63
|
+
- ".rubocop.yml"
|
|
64
|
+
- ".tm_properties"
|
|
65
|
+
- ".yardopts"
|
|
66
|
+
- CHANGELOG.md
|
|
67
|
+
- MIT-LICENSE.txt
|
|
68
|
+
- README.md
|
|
69
|
+
- Rakefile
|
|
70
|
+
- SECURITY.md
|
|
71
|
+
- examples/confidential_client/.gitignore
|
|
72
|
+
- examples/confidential_client/Gemfile
|
|
73
|
+
- examples/confidential_client/Gemfile.lock
|
|
74
|
+
- examples/confidential_client/README.md
|
|
75
|
+
- examples/confidential_client/app.rb
|
|
76
|
+
- examples/confidential_client/config.ru
|
|
77
|
+
- examples/confidential_client/config/client-metadata.example.json
|
|
78
|
+
- examples/confidential_client/public/styles.css
|
|
79
|
+
- examples/confidential_client/screenshots/screenshot-1-sign-in.png
|
|
80
|
+
- examples/confidential_client/screenshots/screenshot-2-success.png
|
|
81
|
+
- examples/confidential_client/scripts/generate_keys.rb
|
|
82
|
+
- examples/confidential_client/views/authorized.erb
|
|
83
|
+
- examples/confidential_client/views/index.erb
|
|
84
|
+
- examples/confidential_client/views/layout.erb
|
|
85
|
+
- examples/minisky_console/.gitignore
|
|
86
|
+
- examples/minisky_console/Gemfile
|
|
87
|
+
- examples/minisky_console/Gemfile.lock
|
|
88
|
+
- examples/minisky_console/README.md
|
|
89
|
+
- examples/minisky_console/app.rb
|
|
90
|
+
- examples/minisky_console/bin/console
|
|
91
|
+
- examples/minisky_console/config.ru
|
|
92
|
+
- examples/minisky_console/localhost.rb
|
|
93
|
+
- examples/minisky_console/production.rb
|
|
94
|
+
- lib/authproto.rb
|
|
95
|
+
- lib/authproto/client.rb
|
|
96
|
+
- lib/authproto/client_metadata.rb
|
|
97
|
+
- lib/authproto/configuration.rb
|
|
98
|
+
- lib/authproto/dpop/client.rb
|
|
99
|
+
- lib/authproto/dpop/key_manager.rb
|
|
100
|
+
- lib/authproto/dpop/nonce_manager.rb
|
|
101
|
+
- lib/authproto/dpop/proof_generator.rb
|
|
102
|
+
- lib/authproto/dpop/stored_nonce.rb
|
|
103
|
+
- lib/authproto/encryption.rb
|
|
104
|
+
- lib/authproto/errors.rb
|
|
105
|
+
- lib/authproto/http_client.rb
|
|
106
|
+
- lib/authproto/insecure_http_client.rb
|
|
107
|
+
- lib/authproto/localhost_server.rb
|
|
108
|
+
- lib/authproto/minisky.rb
|
|
109
|
+
- lib/authproto/par.rb
|
|
110
|
+
- lib/authproto/par/client.rb
|
|
111
|
+
- lib/authproto/par/client_assertion.rb
|
|
112
|
+
- lib/authproto/par/request.rb
|
|
113
|
+
- lib/authproto/par/response.rb
|
|
114
|
+
- lib/authproto/pkce.rb
|
|
115
|
+
- lib/authproto/serialization/base.rb
|
|
116
|
+
- lib/authproto/serialization/dpop_key.rb
|
|
117
|
+
- lib/authproto/serialization/session.rb
|
|
118
|
+
- lib/authproto/serialization/stored_nonce.rb
|
|
119
|
+
- lib/authproto/serialization/token_set.rb
|
|
120
|
+
- lib/authproto/server_metadata.rb
|
|
121
|
+
- lib/authproto/server_metadata/authorization_server.rb
|
|
122
|
+
- lib/authproto/server_metadata/origin_url.rb
|
|
123
|
+
- lib/authproto/server_metadata/resource_server.rb
|
|
124
|
+
- lib/authproto/state.rb
|
|
125
|
+
- lib/authproto/state/session.rb
|
|
126
|
+
- lib/authproto/state/session_manager.rb
|
|
127
|
+
- lib/authproto/state/token_set.rb
|
|
128
|
+
- lib/authproto/storage/interface.rb
|
|
129
|
+
- lib/authproto/storage/key_builder.rb
|
|
130
|
+
- lib/authproto/storage/memory.rb
|
|
131
|
+
- lib/authproto/storage/redis.rb
|
|
132
|
+
- lib/authproto/storage/sqlite.rb
|
|
133
|
+
- lib/authproto/token/refresh.rb
|
|
134
|
+
- lib/authproto/version.rb
|
|
135
|
+
- sig/authproto.rbs
|
|
136
|
+
- sig/authproto/client.rbs
|
|
137
|
+
- sig/authproto/client_metadata.rbs
|
|
138
|
+
- sig/authproto/dependencies.rbs
|
|
139
|
+
- sig/authproto/dpop/client.rbs
|
|
140
|
+
- sig/authproto/dpop/key_manager.rbs
|
|
141
|
+
- sig/authproto/dpop/nonce_manager.rbs
|
|
142
|
+
- sig/authproto/dpop/proof_generator.rbs
|
|
143
|
+
- sig/authproto/dpop/stored_nonce.rbs
|
|
144
|
+
- sig/authproto/encryption.rbs
|
|
145
|
+
- sig/authproto/http_client.rbs
|
|
146
|
+
- sig/authproto/insecure_http_client.rbs
|
|
147
|
+
- sig/authproto/localhost_server.rbs
|
|
148
|
+
- sig/authproto/minisky_oauth.rbs
|
|
149
|
+
- sig/authproto/par.rbs
|
|
150
|
+
- sig/authproto/par/client.rbs
|
|
151
|
+
- sig/authproto/par/client_assertion.rbs
|
|
152
|
+
- sig/authproto/par/request.rbs
|
|
153
|
+
- sig/authproto/par/response.rbs
|
|
154
|
+
- sig/authproto/pkce.rbs
|
|
155
|
+
- sig/authproto/serialization/base.rbs
|
|
156
|
+
- sig/authproto/serialization/dpop_key.rbs
|
|
157
|
+
- sig/authproto/serialization/session.rbs
|
|
158
|
+
- sig/authproto/serialization/stored_nonce.rbs
|
|
159
|
+
- sig/authproto/serialization/token_set.rbs
|
|
160
|
+
- sig/authproto/server_metadata/authorization_server.rbs
|
|
161
|
+
- sig/authproto/server_metadata/origin_url.rbs
|
|
162
|
+
- sig/authproto/server_metadata/resource_server.rbs
|
|
163
|
+
- sig/authproto/state.rbs
|
|
164
|
+
- sig/authproto/state/session.rbs
|
|
165
|
+
- sig/authproto/state/session_manager.rbs
|
|
166
|
+
- sig/authproto/state/token_set.rbs
|
|
167
|
+
- sig/authproto/storage/interface.rbs
|
|
168
|
+
- sig/authproto/storage/key_builder.rbs
|
|
169
|
+
- sig/authproto/storage/memory.rbs
|
|
170
|
+
- sig/authproto/storage/redis.rbs
|
|
171
|
+
- sig/authproto/storage/redis_client.rbs
|
|
172
|
+
- sig/authproto/storage/sqlite.rbs
|
|
173
|
+
- sig/authproto/token/refresh.rbs
|
|
174
|
+
- sig/authproto/version.rbs
|
|
175
|
+
homepage: https://github.com/mackuba/authproto
|
|
176
|
+
licenses:
|
|
177
|
+
- MIT
|
|
178
|
+
metadata:
|
|
179
|
+
homepage_uri: https://github.com/mackuba/authproto
|
|
180
|
+
source_code_uri: https://github.com/mackuba/authproto
|
|
181
|
+
changelog_uri: https://github.com/mackuba/authproto/blob/main/CHANGELOG.md
|
|
182
|
+
rubygems_mfa_required: 'true'
|
|
183
|
+
rdoc_options: []
|
|
184
|
+
require_paths:
|
|
185
|
+
- lib
|
|
186
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
187
|
+
requirements:
|
|
188
|
+
- - ">="
|
|
189
|
+
- !ruby/object:Gem::Version
|
|
190
|
+
version: '3.3'
|
|
191
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
|
+
requirements:
|
|
193
|
+
- - ">="
|
|
194
|
+
- !ruby/object:Gem::Version
|
|
195
|
+
version: '0'
|
|
196
|
+
requirements: []
|
|
197
|
+
rubygems_version: 4.0.23
|
|
198
|
+
specification_version: 4
|
|
199
|
+
summary: Ruby implementation of the AT Protocol OAuth specification
|
|
200
|
+
test_files: []
|