smart_app_launch_test_kit 0.4.1 → 0.4.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f66c9b0314200d03d78422dc6412fe30cd0a091cd34d2a4701b9daa9a85d45f6
4
- data.tar.gz: 7a34428293bfe281ebeebf83e8ee37597ebdfef2bf158cb8a3893598eca09876
3
+ metadata.gz: cbcdac5d671ebac20ff73778eddb755fb7a3774ef4ac3000260f6d6d6cb4d7f0
4
+ data.tar.gz: 1f34741969397758075cab6802652dd7f8895d137d3f9b819c28ea7662a64d27
5
5
  SHA512:
6
- metadata.gz: d5f432c1b4b43a2c84be8613acb0b31dec557b80b1b76996773c76486db5197265a3dc1f0b9a9015eaa35c17c65d5b6b7eb506d940676e0cdae3b798b1cf8799
7
- data.tar.gz: b63b86f90dbfc0ea88b7cc65e2075333b07a2cee7d42f88f21d209f4a51274545532706ed0278efad3cd4a0316be4ae32e948632f4ba66247d5451c68eff9559
6
+ metadata.gz: 8b6bbae2d20d3039b3c2e701e66a85eb4dad83f4f6e8b7f044eac044f7de4582a03a9bbca2d2e38febcf41cf51216fcd0651c863fe90c890fbac2be284ff2bc2
7
+ data.tar.gz: cbeca0cdb3c88e163e5e41ab7d8015715d8d4fd1192d69865b0936a1ab98fe6328053f7060f1c4e6aa7d2ef78fb0f0b445ebb1751ee9c3e346b622fa3e8631f1
@@ -13,8 +13,9 @@ module SMARTAppLaunch
13
13
  input :client_auth_encryption_method,
14
14
  :backend_services_requested_scope,
15
15
  :backend_services_client_id,
16
- :smart_token_url,
17
- :backend_services_jwks_kid
16
+ :smart_token_url
17
+ input :backend_services_jwks_kid,
18
+ optional: true
18
19
 
19
20
  output :authentication_response
20
21
 
@@ -20,8 +20,9 @@ module SMARTAppLaunch
20
20
  input :client_auth_encryption_method,
21
21
  :backend_services_requested_scope,
22
22
  :backend_services_client_id,
23
- :smart_token_url,
24
- :backend_services_jwks_kid
23
+ :smart_token_url
24
+ input :backend_services_jwks_kid,
25
+ optional: true
25
26
 
26
27
  http_client :token_endpoint do
27
28
  url :smart_token_url
@@ -20,8 +20,9 @@ module SMARTAppLaunch
20
20
  input :client_auth_encryption_method,
21
21
  :backend_services_requested_scope,
22
22
  :backend_services_client_id,
23
- :smart_token_url,
24
- :backend_services_jwks_kid
23
+ :smart_token_url
24
+ input :backend_services_jwks_kid,
25
+ optional: true
25
26
 
26
27
  http_client :token_endpoint do
27
28
  url :smart_token_url
@@ -31,8 +31,9 @@ module SMARTAppLaunch
31
31
  input :client_auth_encryption_method,
32
32
  :backend_services_requested_scope,
33
33
  :backend_services_client_id,
34
- :smart_token_url,
35
- :backend_services_jwks_kid
34
+ :smart_token_url
35
+ input :backend_services_jwks_kid,
36
+ optional: true
36
37
 
37
38
  http_client :token_endpoint do
38
39
  url :smart_token_url
@@ -116,18 +116,31 @@ module SMARTAppLaunch
116
116
  in the table below to app developers. The server SHALL use both a FHIR
117
117
  CapabilityStatement and A Well-Known Uris JSON file.
118
118
  )
119
+
119
120
  input :well_known_authorization_url,
120
- :well_known_introspection_url,
121
- :well_known_management_url,
122
- :well_known_registration_url,
123
- :well_known_revocation_url,
124
- :well_known_token_url,
125
- :capability_authorization_url,
126
- :capability_introspection_url,
127
- :capability_management_url,
128
- :capability_registration_url,
129
- :capability_revocation_url,
130
- :capability_token_url
121
+ optional: true
122
+ input :well_known_introspection_url,
123
+ optional: true
124
+ input :well_known_management_url,
125
+ optional: true
126
+ input :well_known_registration_url,
127
+ optional: true
128
+ input :well_known_revocation_url,
129
+ optional: true
130
+ input :well_known_token_url,
131
+ optional: true
132
+ input :capability_authorization_url,
133
+ optional: true
134
+ input :capability_introspection_url,
135
+ optional: true
136
+ input :capability_management_url,
137
+ optional: true
138
+ input :capability_registration_url,
139
+ optional: true
140
+ input :capability_revocation_url,
141
+ optional: true
142
+ input :capability_token_url,
143
+ optional: true
131
144
  output :smart_authorization_url,
132
145
  :smart_introspection_url,
133
146
  :smart_management_url,
@@ -7,7 +7,7 @@ require_relative 'standalone_launch_group_stu2'
7
7
  require_relative 'ehr_launch_group_stu2'
8
8
  require_relative 'openid_connect_group'
9
9
  require_relative 'token_introspection_group'
10
- require_relative 'token_refresh_group'
10
+ require_relative 'token_refresh_stu2_group'
11
11
  require_relative 'backend_services_authorization_group'
12
12
 
13
13
  module SMARTAppLaunch
@@ -103,7 +103,7 @@ module SMARTAppLaunch
103
103
  }
104
104
  }
105
105
 
106
- group from: :smart_token_refresh,
106
+ group from: :smart_token_refresh_stu2,
107
107
  id: :smart_standalone_refresh_without_scopes,
108
108
  title: 'SMART Token Refresh Without Scopes',
109
109
  config: {
@@ -123,7 +123,7 @@ module SMARTAppLaunch
123
123
  }
124
124
  }
125
125
 
126
- group from: :smart_token_refresh,
126
+ group from: :smart_token_refresh_stu2,
127
127
  id: :smart_standalone_refresh_with_scopes,
128
128
  title: 'SMART Token Refresh With Scopes',
129
129
  config: {
@@ -179,7 +179,7 @@ module SMARTAppLaunch
179
179
  }
180
180
  }
181
181
 
182
- group from: :smart_token_refresh,
182
+ group from: :smart_token_refresh_stu2,
183
183
  id: :smart_ehr_refresh_without_scopes,
184
184
  title: 'SMART Token Refresh Without Scopes',
185
185
  config: {
@@ -199,7 +199,7 @@ module SMARTAppLaunch
199
199
  }
200
200
  }
201
201
 
202
- group from: :smart_token_refresh,
202
+ group from: :smart_token_refresh_stu2,
203
203
  id: :smart_ehr_refresh_with_scopes,
204
204
  title: 'SMART Token Refresh With Scopes',
205
205
  config: {
@@ -0,0 +1,46 @@
1
+ require_relative 'token_refresh_stu2_test'
2
+ require_relative 'token_refresh_body_test'
3
+ require_relative 'token_response_headers_test'
4
+
5
+ module SMARTAppLaunch
6
+ class TokenRefreshSTU2Group < Inferno::TestGroup
7
+ id :smart_token_refresh_stu2
8
+ title 'SMART Token Refresh'
9
+ short_description 'Demonstrate the ability to exchange a refresh token for an access token.'
10
+ description %(
11
+ # Background
12
+
13
+ The #{title} Sequence tests the ability of the system to successfully
14
+ exchange a refresh token for an access token. Refresh tokens are typically
15
+ longer lived than access tokens and allow client applications to obtain a
16
+ new access token Refresh tokens themselves cannot provide access to
17
+ resources on the server.
18
+
19
+ Token refreshes are accomplished through a `POST` request to the token
20
+ exchange endpoint as described in the [SMART App Launch
21
+ Framework](https://www.hl7.org/fhir/smart-app-launch/1.0.0/index.html#step-5-later-app-uses-a-refresh-token-to-obtain-a-new-access-token).
22
+
23
+ # Test Methodology
24
+
25
+ This test attempts to exchange the refresh token for a new access token
26
+ and verify that the information returned contains the required fields and
27
+ uses the proper headers.
28
+
29
+ For more information see:
30
+
31
+ * [The OAuth 2.0 Authorization
32
+ Framework](https://tools.ietf.org/html/rfc6749)
33
+ * [Using a refresh token to obtain a new access
34
+ token](https://www.hl7.org/fhir/smart-app-launch/1.0.0/index.html#step-5-later-app-uses-a-refresh-token-to-obtain-a-new-access-token)
35
+ )
36
+
37
+ test from: :smart_token_refresh_stu2
38
+ test from: :smart_token_refresh_body
39
+ test from: :smart_token_response_headers,
40
+ config: {
41
+ requests: {
42
+ token: { name: :token_refresh }
43
+ }
44
+ }
45
+ end
46
+ end
@@ -0,0 +1,46 @@
1
+ require_relative 'token_refresh_test'
2
+
3
+ module SMARTAppLaunch
4
+ class TokenRefreshSTU2Test < TokenRefreshTest
5
+ include TokenPayloadValidation
6
+
7
+ id :smart_token_refresh_stu2
8
+ title 'Server successfully refreshes the access token when optional scope parameter omitted'
9
+ description %(
10
+ Server successfully exchanges refresh token at OAuth token endpoint
11
+ without providing scope in the body of the request.
12
+
13
+ Although not required in the token refresh portion of the SMART App
14
+ Launch Guide, the token refresh response should include the HTTP
15
+ Cache-Control response header field with a value of no-store, as well as
16
+ the Pragma response header field with a value of no-cache to be
17
+ consistent with the requirements of the inital access token exchange.
18
+ )
19
+ input :client_auth_type
20
+ input :client_auth_encryption_method, optional: true
21
+ input :client_secret, optional: true
22
+
23
+ def add_credentials_to_request(oauth2_headers, oauth2_params)
24
+ case client_auth_type
25
+ when 'public'
26
+ oauth2_params['client_id'] = client_id
27
+ when 'confidential_symmetric'
28
+ assert client_secret.present?,
29
+ "A client secret must be provided when using confidential symmetric client authentication."
30
+
31
+ credentials = Base64.strict_encode64("#{client_id}:#{client_secret}")
32
+ oauth2_headers['Authorization'] = "Basic #{credentials}"
33
+ when 'confidential_asymmetric'
34
+ oauth2_params.merge!(
35
+ client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
36
+ client_assertion: ClientAssertionBuilder.build(
37
+ iss: client_id,
38
+ sub: client_id,
39
+ aud: smart_token_url,
40
+ client_auth_encryption_method: client_auth_encryption_method
41
+ )
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end
@@ -21,6 +21,15 @@ module SMARTAppLaunch
21
21
  output :smart_credentials, :token_retrieval_time
22
22
  makes_request :token_refresh
23
23
 
24
+ def add_credentials_to_request(oauth2_headers, oauth2_params)
25
+ if client_secret.present?
26
+ credentials = Base64.strict_encode64("#{client_id}:#{client_secret}")
27
+ oauth2_headers['Authorization'] = "Basic #{credentials}"
28
+ else
29
+ oauth2_params['client_id'] = client_id
30
+ end
31
+ end
32
+
24
33
  run do
25
34
  skip_if refresh_token.blank?
26
35
 
@@ -32,12 +41,7 @@ module SMARTAppLaunch
32
41
 
33
42
  oauth2_params['scope'] = received_scopes if config.options[:include_scopes]
34
43
 
35
- if client_secret.present?
36
- credentials = Base64.strict_encode64("#{client_id}:#{client_secret}")
37
- oauth2_headers['Authorization'] = "Basic #{credentials}"
38
- else
39
- oauth2_params['client_id'] = client_id
40
- end
44
+ add_credentials_to_request(oauth2_headers, oauth2_params)
41
45
 
42
46
  post(smart_token_url, body: oauth2_params, name: :token_refresh, headers: oauth2_headers)
43
47
 
@@ -1,3 +1,3 @@
1
1
  module SMARTAppLaunch
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.4.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_app_launch_test_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen MacVicar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-31 00:00:00.000000000 Z
11
+ date: 2024-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inferno_core
@@ -186,6 +186,8 @@ files:
186
186
  - lib/smart_app_launch/token_payload_validation.rb
187
187
  - lib/smart_app_launch/token_refresh_body_test.rb
188
188
  - lib/smart_app_launch/token_refresh_group.rb
189
+ - lib/smart_app_launch/token_refresh_stu2_group.rb
190
+ - lib/smart_app_launch/token_refresh_stu2_test.rb
189
191
  - lib/smart_app_launch/token_refresh_test.rb
190
192
  - lib/smart_app_launch/token_response_body_test.rb
191
193
  - lib/smart_app_launch/token_response_headers_test.rb
@@ -195,12 +197,12 @@ files:
195
197
  - lib/smart_app_launch/well_known_capabilities_stu2_test.rb
196
198
  - lib/smart_app_launch/well_known_endpoint_test.rb
197
199
  - lib/smart_app_launch_test_kit.rb
198
- homepage: https://github.com/inferno_framework/smart-app-launch-test-kit
200
+ homepage: https://github.com/inferno-framework/smart-app-launch-test-kit
199
201
  licenses:
200
202
  - Apache-2.0
201
203
  metadata:
202
- homepage_uri: https://github.com/inferno_framework/smart-app-launch-test-kit
203
- source_code_uri: https://github.com/inferno_framework/smart-app-launch-test-kit
204
+ homepage_uri: https://github.com/inferno-framework/smart-app-launch-test-kit
205
+ source_code_uri: https://github.com/inferno-framework/smart-app-launch-test-kit
204
206
  post_install_message:
205
207
  rdoc_options: []
206
208
  require_paths:
@@ -216,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
218
  - !ruby/object:Gem::Version
217
219
  version: '0'
218
220
  requirements: []
219
- rubygems_version: 3.3.7
221
+ rubygems_version: 3.5.9
220
222
  signing_key:
221
223
  specification_version: 4
222
224
  summary: Inferno Tests for the SMART Application Launch Framework Implementation Guide