udap_security_test_kit 0.11.6 → 0.12.0
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 +4 -4
- data/lib/udap_security_test_kit/client_suite.rb +3 -0
- data/lib/udap_security_test_kit/registration_failure_invalid_contents_test.rb +1 -1
- data/lib/udap_security_test_kit/requirements/generated/udap-security-test-kit_requirements_coverage.csv +317 -0
- data/lib/udap_security_test_kit/requirements/generated/udap_security_client_requirements_coverage.csv +38 -38
- data/lib/udap_security_test_kit/requirements/generated/udap_security_requirements_coverage.csv +70 -70
- data/lib/udap_security_test_kit/version.rb +2 -2
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/b2b_authorization_extension_object_test.rb +77 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/client_authorization_code_usage_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/client_security_csrf_protection_test.rb +50 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/cryptographic_algorithms_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/data_holder_auth_request_scope_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/idp_authentication_compliance_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/idp_supports_required_scopes_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/jti_reuse_prevention_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/metadata_interpretation_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/oauth2_protocol_compliance_test.rb +50 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/preferred_identity_provider_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/private_key_authentication_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/resource_holder_authentication_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/software_statement_registration_test.rb +49 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/token_request_authentication_test.rb +51 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/trust_community_query_parameters_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/validation_confidentiality_test.rb +49 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client_attestation_group.rb +48 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group/authentication_request_construction_test.rb +56 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group/authentication_request_validation_test.rb +60 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group.rb +13 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/access_token_lifetime_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/access_token_request_validation_test.rb +51 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/authorization_code_usage_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/resource_holder_authorization_flow_test.rb +37 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group.rb +17 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group/client_certificate_storage_test.rb +36 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group/no_client_credentials_native_apps_test.rb +38 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group.rb +13 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/certification_handling_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/client_id_modification_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/dynamic_client_registration_validation_test.rb +48 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group.rb +15 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/deny_token_request_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/general_error_response_test.rb +39 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_id_token_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_idp_test.rb +39 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_redirection_uri_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/prompt_none_test.rb +39 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/state_mismatch_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/unauthenticated_user_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/valid_state_error_response_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group.rb +27 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/access_token_validation_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/id_token_validation_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/token_response_validation_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group.rb +15 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_authentication_request_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_dynamic_registration_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_metadata_validation_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_token_exchange_test.rb +46 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group.rb +17 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_certificate_chain_validation_test.rb +36 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_grant_parameter_validation_test.rb +36 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_jti_reuse_test.rb +35 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_signature_validation_test.rb +36 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_token_request_validation_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group.rb +19 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_authorization_extensions_required_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_community_parameter_support_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_metadata_endpoint_error_handling_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_metadata_representation_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_profiles_supported_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group.rb +19 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/csrf_protection_test.rb +49 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/obtain_authorization_scopes_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/state_parameter_test.rb +48 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/unauthenticated_client_security_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group.rb +17 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server_attestation_group.rb +33 -0
- data/lib/udap_security_test_kit.rb +2 -0
- metadata +81 -4
@@ -0,0 +1,56 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class AuthenticationRequestConstructionAttestationTest < Inferno::Test
|
3
|
+
title 'Complies with OpenID Connect requirements in construction'
|
4
|
+
id :oidc_auth_request_construction
|
5
|
+
description %(
|
6
|
+
Authorization Server complies ith OpenID Connect requirements and ensures:
|
7
|
+
- HTTP GET and POST methods are supported at the Authorization Endpoint.
|
8
|
+
- The `openid` scope value is included in requests.
|
9
|
+
- A `scope` parameter is present and contains the `openid` scope value on an authentication request
|
10
|
+
- Required parameters (`response_type`, `client_id`, `redirect_uri`) are present and valid.
|
11
|
+
- The `redirect_uri` exactly matches pre-registered values.
|
12
|
+
)
|
13
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@246',
|
14
|
+
'hl7.fhir.us.udap-security_1.0.0@247',
|
15
|
+
'hl7.fhir.us.udap-security_1.0.0@248',
|
16
|
+
'hl7.fhir.us.udap-security_1.0.0@249',
|
17
|
+
'hl7.fhir.us.udap-security_1.0.0@250',
|
18
|
+
'hl7.fhir.us.udap-security_1.0.0@251',
|
19
|
+
'hl7.fhir.us.udap-security_1.0.0@259'
|
20
|
+
|
21
|
+
input :auth_request_construction_correct,
|
22
|
+
title: 'Authentication Requests: Complies with OpenID Connect requirements',
|
23
|
+
description: %(
|
24
|
+
I attest that the Authorization Server complies with OpenID Connect requirements and ensures:
|
25
|
+
- HTTP GET and POST methods are supported at the Authorization Endpoint.
|
26
|
+
- The `openid` scope value is included in requests.
|
27
|
+
- A `scope` parameter is present and contains the `openid` scope value on an authentication request
|
28
|
+
- Required parameters (`response_type`, `client_id`, `redirect_uri`) are present and valid.
|
29
|
+
- The `redirect_uri` exactly matches pre-registered values.
|
30
|
+
),
|
31
|
+
type: 'radio',
|
32
|
+
default: 'false',
|
33
|
+
options: {
|
34
|
+
list_options: [
|
35
|
+
{
|
36
|
+
label: 'Yes',
|
37
|
+
value: 'true'
|
38
|
+
},
|
39
|
+
{
|
40
|
+
label: 'No',
|
41
|
+
value: 'false'
|
42
|
+
}
|
43
|
+
]
|
44
|
+
}
|
45
|
+
input :auth_request_construction_note,
|
46
|
+
title: 'Notes, if applicable:',
|
47
|
+
type: 'textarea',
|
48
|
+
optional: true
|
49
|
+
|
50
|
+
run do
|
51
|
+
assert auth_request_construction_correct == 'true',
|
52
|
+
'Authentication Request Construction does not comply with OpenID Connect requirements.'
|
53
|
+
pass auth_request_construction_note if auth_request_construction_note.present?
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class AuthenticationRequestValidationAttestationTest < Inferno::Test
|
3
|
+
title 'Complies with OpenID Connect requirements in validation'
|
4
|
+
id :oidc_auth_request_validation
|
5
|
+
description %(
|
6
|
+
Authorization Server complies with OpenID Connect requirements and ensures:
|
7
|
+
- Validation of all OAuth 2.0 parameters.
|
8
|
+
- Verification that the `scope` parameter contains the `openid` value.
|
9
|
+
- Required parameters are present and conform to the specification.
|
10
|
+
- Proper handling of the `sub` Claim, `id_token_hint`, and `prompt` parameter.
|
11
|
+
- Implementation of CSRF and Clickjacking protections.
|
12
|
+
)
|
13
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@258',
|
14
|
+
'hl7.fhir.us.udap-security_1.0.0@259',
|
15
|
+
'hl7.fhir.us.udap-security_1.0.0@260',
|
16
|
+
'hl7.fhir.us.udap-security_1.0.0@261',
|
17
|
+
'hl7.fhir.us.udap-security_1.0.0@262',
|
18
|
+
'hl7.fhir.us.udap-security_1.0.0@263',
|
19
|
+
'hl7.fhir.us.udap-security_1.0.0@264',
|
20
|
+
'hl7.fhir.us.udap-security_1.0.0@265',
|
21
|
+
'hl7.fhir.us.udap-security_1.0.0@266',
|
22
|
+
'hl7.fhir.us.udap-security_1.0.0@267',
|
23
|
+
'hl7.fhir.us.udap-security_1.0.0@269'
|
24
|
+
|
25
|
+
input :auth_request_validation_correct,
|
26
|
+
title: 'Authentication Requests: Complies with OpenID Connect requirements in validation',
|
27
|
+
description: %(
|
28
|
+
I attest that the Authorization Server complies with OpenID Connect requirements and ensures:
|
29
|
+
- Validation of all OAuth 2.0 parameters.
|
30
|
+
- Verification that the `scope` parameter contains the `openid` value.
|
31
|
+
- Required parameters are present and conform to the specification.
|
32
|
+
- Proper handling of the `sub` Claim, `id_token_hint`, and `prompt` parameter.
|
33
|
+
- Implementation of CSRF and Clickjacking protections.
|
34
|
+
),
|
35
|
+
type: 'radio',
|
36
|
+
default: 'false',
|
37
|
+
options: {
|
38
|
+
list_options: [
|
39
|
+
{
|
40
|
+
label: 'Yes',
|
41
|
+
value: 'true'
|
42
|
+
},
|
43
|
+
{
|
44
|
+
label: 'No',
|
45
|
+
value: 'false'
|
46
|
+
}
|
47
|
+
]
|
48
|
+
}
|
49
|
+
input :auth_request_validation_note,
|
50
|
+
title: 'Notes, if applicable:',
|
51
|
+
type: 'textarea',
|
52
|
+
optional: true
|
53
|
+
|
54
|
+
run do
|
55
|
+
assert auth_request_validation_correct == 'true',
|
56
|
+
'Authentication Request Validation does not comply with OpenID Connect requirements.'
|
57
|
+
pass auth_request_validation_note if auth_request_validation_note.present?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'authentication_requests_group/authentication_request_construction_test'
|
2
|
+
require_relative 'authentication_requests_group/authentication_request_validation_test'
|
3
|
+
|
4
|
+
module UDAPSecurityTestKit
|
5
|
+
class OpenIDConnectAuthenticationRequestsAttestationGroup < Inferno::TestGroup
|
6
|
+
id :udap_server_v100_authentication_requests_group
|
7
|
+
title 'Authentication Requests'
|
8
|
+
|
9
|
+
run_as_group
|
10
|
+
test from: :oidc_auth_request_construction
|
11
|
+
test from: :oidc_auth_request_validation
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class AccessTokenLifetimeAttestationTest < Inferno::Test
|
3
|
+
title 'Limits lifetime of access tokens to no longer than 60 minutes'
|
4
|
+
id :udap_security_access_token_lifetime
|
5
|
+
description %(
|
6
|
+
The Authorization Server issues access tokens with a lifetime no longer than 60 minutes for all successful
|
7
|
+
token requests.
|
8
|
+
)
|
9
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@184'
|
10
|
+
|
11
|
+
input :access_token_lifetime_correct,
|
12
|
+
title: 'Authorization Code and Token Requests: Limits lifetime of access tokens to no longer than 60 minutes',
|
13
|
+
description: %(
|
14
|
+
I attest that the Authorization Server issues access tokens with a lifetime no longer than 60 minutes for
|
15
|
+
all successful token requests.
|
16
|
+
),
|
17
|
+
type: 'radio',
|
18
|
+
default: 'false',
|
19
|
+
options: {
|
20
|
+
list_options: [
|
21
|
+
{
|
22
|
+
label: 'Yes',
|
23
|
+
value: 'true'
|
24
|
+
},
|
25
|
+
{
|
26
|
+
label: 'No',
|
27
|
+
value: 'false'
|
28
|
+
}
|
29
|
+
]
|
30
|
+
}
|
31
|
+
input :access_token_lifetime_note,
|
32
|
+
title: 'Notes, if applicable:',
|
33
|
+
type: 'textarea',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
run do
|
37
|
+
assert access_token_lifetime_correct == 'true',
|
38
|
+
'Authorization Server did not issue access tokens with a lifetime no longer than 60 minutes.'
|
39
|
+
pass access_token_lifetime_note if access_token_lifetime_note.present?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class AccessTokenRequestValidationAttestationTest < Inferno::Test
|
3
|
+
title 'Validates access token requests correctly'
|
4
|
+
id :udap_security_access_token_request_validation
|
5
|
+
description %(
|
6
|
+
The Authorization Server validates access token requests by:
|
7
|
+
- Requiring client authentication for confidential clients or clients issued credentials.
|
8
|
+
- Authenticating the client if client authentication is included.
|
9
|
+
- Verifying that the authorization code is valid.
|
10
|
+
- Ensuring the `redirect_uri` parameter is present and matches the initial authorization request.
|
11
|
+
)
|
12
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@146',
|
13
|
+
'hl7.fhir.us.udap-security_1.0.0@147',
|
14
|
+
'hl7.fhir.us.udap-security_1.0.0@149',
|
15
|
+
'hl7.fhir.us.udap-security_1.0.0@150'
|
16
|
+
|
17
|
+
input :access_token_request_validation_correct,
|
18
|
+
title: 'Authorization Code and Token Requests: Validates access token requests correctly',
|
19
|
+
description: %(
|
20
|
+
I attest that the Authorization Server validates access token requests by:
|
21
|
+
- Requiring client authentication for confidential clients or clients issued credentials.
|
22
|
+
- Authenticating the client if client authentication is included.
|
23
|
+
- Verifying that the authorization code is valid.
|
24
|
+
- Ensuring the `redirect_uri` parameter is present and matches the initial authorization request.
|
25
|
+
),
|
26
|
+
type: 'radio',
|
27
|
+
default: 'false',
|
28
|
+
options: {
|
29
|
+
list_options: [
|
30
|
+
{
|
31
|
+
label: 'Yes',
|
32
|
+
value: 'true'
|
33
|
+
},
|
34
|
+
{
|
35
|
+
label: 'No',
|
36
|
+
value: 'false'
|
37
|
+
}
|
38
|
+
]
|
39
|
+
}
|
40
|
+
input :access_token_request_validation_note,
|
41
|
+
title: 'Notes, if applicable:',
|
42
|
+
type: 'textarea',
|
43
|
+
optional: true
|
44
|
+
|
45
|
+
run do
|
46
|
+
assert access_token_request_validation_correct == 'true',
|
47
|
+
'Authorization Server did not validate access token requests correctly.'
|
48
|
+
pass access_token_request_validation_note if access_token_request_validation_note.present?
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class AuthorizationCodeUsageAttestationTest < Inferno::Test
|
3
|
+
title 'Ensures authorization code is used correctly'
|
4
|
+
id :udap_security_auth_code_usage
|
5
|
+
description %(
|
6
|
+
The Authorization Server ensures that:
|
7
|
+
- Authorization codes are not used more than once.
|
8
|
+
- Authorization codes expire shortly after issuance to mitigate the risk of leaks.
|
9
|
+
)
|
10
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@135',
|
11
|
+
'hl7.fhir.us.udap-security_1.0.0@137'
|
12
|
+
|
13
|
+
input :authorization_code_usage_correct,
|
14
|
+
title: 'Authorization Code and Token Requests: Ensures Authorization Code is used correctly',
|
15
|
+
description: %(
|
16
|
+
I attest that the Authorization Server ensures:
|
17
|
+
- Authorization codes are not used more than once.
|
18
|
+
- Authorization codes expire shortly after issuance to mitigate the risk of leaks.
|
19
|
+
),
|
20
|
+
type: 'radio',
|
21
|
+
default: 'false',
|
22
|
+
options: {
|
23
|
+
list_options: [
|
24
|
+
{
|
25
|
+
label: 'Yes',
|
26
|
+
value: 'true'
|
27
|
+
},
|
28
|
+
{
|
29
|
+
label: 'No',
|
30
|
+
value: 'false'
|
31
|
+
}
|
32
|
+
]
|
33
|
+
}
|
34
|
+
input :authorization_code_usage_note,
|
35
|
+
title: 'Notes, if applicable:',
|
36
|
+
type: 'textarea',
|
37
|
+
optional: true
|
38
|
+
|
39
|
+
run do
|
40
|
+
assert authorization_code_usage_correct == 'true',
|
41
|
+
'Authorization Server did not ensure correct usage of authorization codes.'
|
42
|
+
pass authorization_code_usage_note if authorization_code_usage_note.present?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class AuthorizationCodeFlowAttestationTest < Inferno::Test
|
3
|
+
title 'Resource Holder uses the authorization code flow'
|
4
|
+
id :udap_security_authorization_code_flow
|
5
|
+
description %(
|
6
|
+
The Resource Holder uses the authorization code flow when redirecting the user
|
7
|
+
to the IdP’s authorization endpoint.
|
8
|
+
)
|
9
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@253'
|
10
|
+
|
11
|
+
input :authorization_code_flow_correct,
|
12
|
+
title: 'Authorization Code and Token Requests: Resource Holder uses authorization code flow',
|
13
|
+
description: %(
|
14
|
+
I attest that the Resource Holder uses the authorization code flow when redirecting
|
15
|
+
the user to the IdP’s authorization endpoint.
|
16
|
+
),
|
17
|
+
type: 'radio',
|
18
|
+
default: 'false',
|
19
|
+
options: {
|
20
|
+
list_options: [
|
21
|
+
{ label: 'Yes', value: 'true' },
|
22
|
+
{ label: 'No', value: 'false' }
|
23
|
+
]
|
24
|
+
}
|
25
|
+
input :authorization_code_flow_note,
|
26
|
+
title: 'Notes, if applicable:',
|
27
|
+
type: 'textarea',
|
28
|
+
optional: true
|
29
|
+
|
30
|
+
run do
|
31
|
+
assert authorization_code_flow_correct == 'true',
|
32
|
+
'Resource Holder does not use the authorization code flow when redirecting the user to the
|
33
|
+
IdP’s authorization endpoint.'
|
34
|
+
pass authorization_code_flow_note if authorization_code_flow_note.present?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'authorization_code_token_requests_group/authorization_code_usage_test'
|
2
|
+
require_relative 'authorization_code_token_requests_group/access_token_request_validation_test'
|
3
|
+
require_relative 'authorization_code_token_requests_group/access_token_lifetime_test'
|
4
|
+
require_relative 'authorization_code_token_requests_group/resource_holder_authorization_flow_test'
|
5
|
+
|
6
|
+
module UDAPSecurityTestKit
|
7
|
+
class AuthorizationCodeTokenRequestsAttestationGroup < Inferno::TestGroup
|
8
|
+
id :udap_server_v100_authorization_code_token_requests_group
|
9
|
+
title 'Authorization Code and Token Requests'
|
10
|
+
|
11
|
+
run_as_group
|
12
|
+
test from: :udap_security_auth_code_usage
|
13
|
+
test from: :udap_security_access_token_request_validation
|
14
|
+
test from: :udap_security_access_token_lifetime
|
15
|
+
test from: :udap_security_authorization_code_flow
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class ClientCertificateStorageAttestationTest < Inferno::Test
|
3
|
+
title 'Authorization Server stores client certificate for authentication'
|
4
|
+
id :udap_security_client_certificate_storage
|
5
|
+
description %(
|
6
|
+
The Authorization Server stores the certificate provided by the Client for
|
7
|
+
use in validating subsequent client authentication attempts.
|
8
|
+
)
|
9
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@112'
|
10
|
+
|
11
|
+
input :client_certificate_storage_correct,
|
12
|
+
title: 'Client Authentication: Authorization Server stores client certificate',
|
13
|
+
description: %(
|
14
|
+
I attest that the Authorization Server stores the certificate provided by the Client for
|
15
|
+
use in validating subsequent client authentication attempts.
|
16
|
+
),
|
17
|
+
type: 'radio',
|
18
|
+
default: 'false',
|
19
|
+
options: {
|
20
|
+
list_options: [
|
21
|
+
{ label: 'Yes', value: 'true' },
|
22
|
+
{ label: 'No', value: 'false' }
|
23
|
+
]
|
24
|
+
}
|
25
|
+
input :client_certificate_storage_note,
|
26
|
+
title: 'Notes, if applicable:',
|
27
|
+
type: 'textarea',
|
28
|
+
optional: true
|
29
|
+
|
30
|
+
run do
|
31
|
+
assert client_certificate_storage_correct == 'true',
|
32
|
+
'Authorization Server does not store the client certificate for use in subsequent authentication attempts.'
|
33
|
+
pass client_certificate_storage_note if client_certificate_storage_note.present?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class NoClientCredentialsForNativeAppsAttestationTest < Inferno::Test
|
3
|
+
title 'Does not issue client credentials to native/user-agent-based apps'
|
4
|
+
id :udap_security_no_client_credentials_native_apps
|
5
|
+
description %(
|
6
|
+
The Authorization Server does not issue client passwords or other client
|
7
|
+
credentials to native application or user-agent-based application clients for the
|
8
|
+
purpose of client authentication.
|
9
|
+
)
|
10
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@287'
|
11
|
+
|
12
|
+
input :no_client_credentials_native_apps_correct,
|
13
|
+
title: 'Client Authentication: Does not issue client credentials to native/user-agent-based apps',
|
14
|
+
description: %(
|
15
|
+
I attest that the Authorization Server does not issue client passwords or other client
|
16
|
+
credentials to native application or user-agent-based application clients for the
|
17
|
+
purpose of client authentication.
|
18
|
+
),
|
19
|
+
type: 'radio',
|
20
|
+
default: 'false',
|
21
|
+
options: {
|
22
|
+
list_options: [
|
23
|
+
{ label: 'Yes', value: 'true' },
|
24
|
+
{ label: 'No', value: 'false' }
|
25
|
+
]
|
26
|
+
}
|
27
|
+
input :no_client_credentials_native_apps_note,
|
28
|
+
title: 'Notes, if applicable:',
|
29
|
+
type: 'textarea',
|
30
|
+
optional: true
|
31
|
+
|
32
|
+
run do
|
33
|
+
assert no_client_credentials_native_apps_correct == 'true',
|
34
|
+
'Authorization Server issues client credentials to native or user-agent-based application clients.'
|
35
|
+
pass no_client_credentials_native_apps_note if no_client_credentials_native_apps_note.present?
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'client_authentication_group/client_certificate_storage_test'
|
2
|
+
require_relative 'client_authentication_group/no_client_credentials_native_apps_test'
|
3
|
+
|
4
|
+
module UDAPSecurityTestKit
|
5
|
+
class ClientAuthenticationGroup < Inferno::TestGroup
|
6
|
+
id :udap_server_v100_client_authentication_group
|
7
|
+
title 'Client Authentication and Credential Management'
|
8
|
+
|
9
|
+
run_as_group
|
10
|
+
test from: :udap_security_client_certificate_storage
|
11
|
+
test from: :udap_security_no_client_credentials_native_apps
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class CertificationHandlingAttestationTest < Inferno::Test
|
3
|
+
title 'Handles certifications correctly'
|
4
|
+
id :udap_security_certification_handling
|
5
|
+
description %(
|
6
|
+
The Authorization Server handles certifications correctly:
|
7
|
+
- Ignores unsupported or unrecognized certifications.
|
8
|
+
- Communicates required certifications via the `udap_certifications_required` element in its UDAP metadata.
|
9
|
+
)
|
10
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@116',
|
11
|
+
'hl7.fhir.us.udap-security_1.0.0@118'
|
12
|
+
|
13
|
+
input :certification_handling_correct,
|
14
|
+
title: 'Dynamic Client Registration: Handles certifications correctly',
|
15
|
+
description: %(
|
16
|
+
I attest that the Authorization Server handles certifications correctly:
|
17
|
+
- Ignores unsupported or unrecognized certifications.
|
18
|
+
- Communicates required certifications via the `udap_certifications_required` element in its UDAP metadata.
|
19
|
+
),
|
20
|
+
type: 'radio',
|
21
|
+
default: 'false',
|
22
|
+
options: {
|
23
|
+
list_options: [
|
24
|
+
{
|
25
|
+
label: 'Yes',
|
26
|
+
value: 'true'
|
27
|
+
},
|
28
|
+
{
|
29
|
+
label: 'No',
|
30
|
+
value: 'false'
|
31
|
+
}
|
32
|
+
]
|
33
|
+
}
|
34
|
+
input :certification_handling_note,
|
35
|
+
title: 'Notes, if applicable:',
|
36
|
+
type: 'textarea',
|
37
|
+
optional: true
|
38
|
+
|
39
|
+
run do
|
40
|
+
assert certification_handling_correct == 'true',
|
41
|
+
'Authorization Server did not handle certifications correctly.'
|
42
|
+
pass certification_handling_note if certification_handling_note.present?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class ClientIDModificationAttestationTest < Inferno::Test
|
3
|
+
title 'Handles client ID modification correctly'
|
4
|
+
id :udap_security_client_id_modification
|
5
|
+
description %(
|
6
|
+
Authorization Server cancels the registration for the previous `client_id` if it returns a different `client_id`
|
7
|
+
in response to a registration modification request.
|
8
|
+
)
|
9
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@121'
|
10
|
+
|
11
|
+
input :client_id_modification_correct,
|
12
|
+
title: 'Dynamic Client Registration: Handles client ID modification correctly',
|
13
|
+
description: %(
|
14
|
+
I attest that the Authorization Server cancels the registration for the previous `client_id` if it
|
15
|
+
returns a different `client_id` in response to a registration modification request.
|
16
|
+
),
|
17
|
+
type: 'radio',
|
18
|
+
default: 'false',
|
19
|
+
options: {
|
20
|
+
list_options: [
|
21
|
+
{
|
22
|
+
label: 'Yes',
|
23
|
+
value: 'true'
|
24
|
+
},
|
25
|
+
{
|
26
|
+
label: 'No',
|
27
|
+
value: 'false'
|
28
|
+
}
|
29
|
+
]
|
30
|
+
}
|
31
|
+
input :client_id_modification_note,
|
32
|
+
title: 'Notes, if applicable:',
|
33
|
+
type: 'textarea',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
run do
|
37
|
+
assert client_id_modification_correct == 'true',
|
38
|
+
'Authorization Server did not handle client ID modification correctly.'
|
39
|
+
pass client_id_modification_note if client_id_modification_note.present?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class DynamicClientRegistrationValidationAttestationTest < Inferno::Test
|
3
|
+
title 'Validates requests correctly'
|
4
|
+
id :udap_security_dynamic_client_registration_validation
|
5
|
+
description %(
|
6
|
+
The Authorization Server validates dynamic client registration requests by:
|
7
|
+
- Ensuring the `sub` value matches the `iss` value.
|
8
|
+
- Ensuring the `aud` value contains the Authorization Server’s registration endpoint URL.
|
9
|
+
- Ensuring the software statement is unexpired.
|
10
|
+
)
|
11
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@107',
|
12
|
+
'hl7.fhir.us.udap-security_1.0.0@108',
|
13
|
+
'hl7.fhir.us.udap-security_1.0.0@109'
|
14
|
+
|
15
|
+
input :dynamic_client_registration_validation_correct,
|
16
|
+
title: 'Dynamic Client Registration: Validates requests correctly',
|
17
|
+
description: %(
|
18
|
+
I attest that the Authorization Server validates dynamic client registration requests by:
|
19
|
+
- Ensuring the `sub` value matches the `iss` value.
|
20
|
+
- Ensuring the `aud` value contains the Authorization Server’s registration endpoint URL.
|
21
|
+
- Ensuring the software statement is unexpired.
|
22
|
+
),
|
23
|
+
type: 'radio',
|
24
|
+
default: 'false',
|
25
|
+
options: {
|
26
|
+
list_options: [
|
27
|
+
{
|
28
|
+
label: 'Yes',
|
29
|
+
value: 'true'
|
30
|
+
},
|
31
|
+
{
|
32
|
+
label: 'No',
|
33
|
+
value: 'false'
|
34
|
+
}
|
35
|
+
]
|
36
|
+
}
|
37
|
+
input :dynamic_client_registration_validation_note,
|
38
|
+
title: 'Notes, if applicable:',
|
39
|
+
type: 'textarea',
|
40
|
+
optional: true
|
41
|
+
|
42
|
+
run do
|
43
|
+
assert dynamic_client_registration_validation_correct == 'true',
|
44
|
+
'Authorization Server did not validate dynamic client registration requests correctly.'
|
45
|
+
pass dynamic_client_registration_validation_note if dynamic_client_registration_validation_note.present?
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative 'dynamic_client_registration_group/certification_handling_test'
|
2
|
+
require_relative 'dynamic_client_registration_group/client_id_modification_test'
|
3
|
+
require_relative 'dynamic_client_registration_group/dynamic_client_registration_validation_test'
|
4
|
+
|
5
|
+
module UDAPSecurityTestKit
|
6
|
+
class DynamicClientRegistrationAttestationGroup < Inferno::TestGroup
|
7
|
+
id :udap_server_v100_dynamic_client_registration_group
|
8
|
+
title 'Dynamic Client Registration'
|
9
|
+
|
10
|
+
run_as_group
|
11
|
+
test from: :udap_security_dynamic_client_registration_validation
|
12
|
+
test from: :udap_security_certification_handling
|
13
|
+
test from: :udap_security_client_id_modification
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class DenyTokenRequestAttestationTest < Inferno::Test
|
3
|
+
title 'Denies token request that cannot be validated from x5c parameter'
|
4
|
+
id :udap_security_deny_token_request
|
5
|
+
description %(
|
6
|
+
Authorization Server denies the token request if:
|
7
|
+
- JWT signature cannot be validated using the public key from the x5c parameter.
|
8
|
+
- A trusted certificate chain cannot be built and validated from the x5c parameter.
|
9
|
+
- Required parameter is missing or a parameter is invalid.
|
10
|
+
)
|
11
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@174',
|
12
|
+
'hl7.fhir.us.udap-security_1.0.0@176',
|
13
|
+
'hl7.fhir.us.udap-security_1.0.0@183'
|
14
|
+
|
15
|
+
input :deny_token_request,
|
16
|
+
title: 'Error Handling: Denies token request that cannot be validated from x5c parameter',
|
17
|
+
description: %(
|
18
|
+
I attest that the Authorization Server denies the token request if:
|
19
|
+
- JWT signature cannot be validated using the public key from the x5c parameter.
|
20
|
+
- A trusted certificate chain cannot be built and validated from the x5c parameter.
|
21
|
+
- Required parameter is missing or a parameter is invalid.
|
22
|
+
),
|
23
|
+
type: 'radio',
|
24
|
+
default: 'false',
|
25
|
+
options: {
|
26
|
+
list_options: [
|
27
|
+
{ label: 'Yes', value: 'true' },
|
28
|
+
{ label: 'No', value: 'false' }
|
29
|
+
]
|
30
|
+
}
|
31
|
+
input :deny_token_request_note,
|
32
|
+
title: 'Notes, if applicable:',
|
33
|
+
type: 'textarea',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
run do
|
37
|
+
assert deny_token_request == 'true',
|
38
|
+
'Authorization Server does not deny the token request when parameter(s) are invalid.'
|
39
|
+
pass deny_token_request_note if deny_token_request_note.present?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class GeneralErrorResponseAttestationTest < Inferno::Test
|
3
|
+
title 'Returns error response on authentication request errors'
|
4
|
+
id :udap_security_general_error_response
|
5
|
+
description %(
|
6
|
+
Authorization Server returns an error response if it encounters any error while validating
|
7
|
+
an authentication request, as per
|
8
|
+
[Section 3.1.2.6](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequestValidation).
|
9
|
+
)
|
10
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@264'
|
11
|
+
|
12
|
+
input :general_error_response_handling_correct,
|
13
|
+
title: 'Error Handling: Returns error response on authentication request errors',
|
14
|
+
description: %(
|
15
|
+
I attest that the Authorization Server returns an error response if it encounters any
|
16
|
+
error while validating an authentication request, as per
|
17
|
+
[Section 3.1.2.6](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequestValidation).
|
18
|
+
),
|
19
|
+
type: 'radio',
|
20
|
+
default: 'false',
|
21
|
+
options: {
|
22
|
+
list_options: [
|
23
|
+
{ label: 'Yes', value: 'true' },
|
24
|
+
{ label: 'No', value: 'false' }
|
25
|
+
]
|
26
|
+
}
|
27
|
+
input :general_error_response_handling_note,
|
28
|
+
title: 'Notes, if applicable:',
|
29
|
+
type: 'textarea',
|
30
|
+
optional: true
|
31
|
+
|
32
|
+
run do
|
33
|
+
assert general_error_response_handling_correct == 'true',
|
34
|
+
'Authorization Server does not return an error response when it encounters an error
|
35
|
+
while validating an authentication request.'
|
36
|
+
pass general_error_response_handling_note if general_error_response_handling_note.present?
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|