@@ -5,63 +5,118 @@ Feature:
55
66 Background :
77 Given an EngineBlock instance on "dev.openconext.local"
8- And no registered SPs
9- And no registered Idps
10- And a Service Provider named "CorrId-SP"
8+ And no registered SPs
9+ And no registered Idps
10+ And a Service Provider named "CorrId-SP"
1111
12- # ── WAYF path ──────────────────────────────────────────────────────────────
13- # Two IdPs are registered, so the WAYF is shown after the initial SSO request.
14- # The correlation ID is minted in SingleSignOn.serve(), propagated to
15- # ContinueToIdp (user picks an IdP), then forwarded to the IdP request via
16- # link(), and finally picked up in AssertionConsumer and ProvideConsent/
17- # ProcessConsent. A complete round-trip through all four HTTP legs must
18- # succeed without error.
1912 Scenario : A user authenticating via the WAYF completes the full four-leg flow
2013 Given an Identity Provider named "CorrId-IdP-A"
21- And an Identity Provider named "CorrId-IdP-B"
14+ And an Identity Provider named "CorrId-IdP-B"
2215 When I log in at "CorrId-SP"
23- And I select "CorrId-IdP-A" on the WAYF
24- And I pass through EngineBlock
25- And I pass through the IdP
26- And I give my consent
27- And I pass through EngineBlock
16+ And I select "CorrId-IdP-A" on the WAYF
17+ And I pass through EngineBlock
18+ And I pass through the IdP
19+ And I give my consent
20+ And I pass through EngineBlock
2821 Then the url should match "functional-testing/CorrId-SP/acs"
22+ #And I dump the log records
23+ And the following log messages should have a correlation_id:
24+ | message |
25+ | Multiple candidate IdPs : redirecting to WAYF |
26+ | Done calling service 'singleSignOnService ' |
27+ | Done calling service 'continueToIdp ' |
28+ | /Received Assertion from Issuer .*/ |
29+ | /SP is not configured for MFA for IdP , or for transparant AuthnContext , skipping validation .*/ |
30+ | Verifying if schacHomeOrganization is allowed by configured IdP shibmd :scopes |
31+ | No shibmd :scope found in the IdP metadata , not verifying schacHomeOrganization |
32+ | Verifying if eduPersonPrincipalName is allowed by configured IdP shibmd :scopes |
33+ | No shibmd :scope found in the IdP metadata , not verifying eduPersonPrincipalName |
34+ | Verifying if subject -id is allowed by configured IdP shibmd :scopes |
35+ | No shibmd :scope found in the IdP metadata , not verifying subject -id |
36+ | /No Attribute Aggregation for .*/ |
37+ | /No SBS interrupt for serviceProvider .*/ |
38+ | StepupDecision : determine highest LoA |
39+ | StepupDecision : no level set , no Stepup required |
40+ | Handle Consent authentication callout |
41+ | Using internal binding for destination /authentication /idp /provide -consent |
42+ | Calling service 'provideConsentService ' |
43+ | Done calling service 'provideConsentService ' |
44+ | Done calling service 'assertionConsumerService ' |
45+ | /Using internal binding for destination https :\/\/engine .dev .openconext .local \/authenticati .*/ |
46+ | Calling service 'processedAssertionConsumerService ' |
47+ | /No ARP available for https :\/\/engine .dev .openconext .local \/functional -testing \/CorrId -SP \/metadata . .*/ |
48+ | Executing the ApplyTrustedProxyBehavior output filter |
49+ | Executing the AddIdentityAttributes output filter |
50+ | Resolving a persistent nameId |
51+ | Setting the NameId on the Assertion |
52+ | Adding the EduPersonTargetedId on the Assertion |
53+ | /Attribute Denormalization : Adding alias 'urn :oid :0 .9 .2342 .19200300 .100 .1 .1 ' .*/ |
54+ | /Attribute Denormalization : Adding alias 'urn :oid :1 .3 .6 .1 .4 .1 .25178 .1 .2 .9 ' for .*/ |
55+ | /Attribute Denormalization : Adding alias 'urn :oid :1 .3 .6 .1 .4 .1 .5923 .1 .1 .1 .10 ' for .*/ |
56+ | HTTP -Post : Sending Message |
57+ | Done calling service 'processedAssertionConsumerService ' |
58+ | Done calling service 'processConsentService ' |
2959
30- # ── Direct path (no WAYF) ───────────────────────────────────────────────────
31- # When only one IdP is available the WAYF is skipped; the correlation ID is
32- # minted inside ProxyServer.sendAuthenticationRequest() and linked to the IdP
33- # request. AssertionConsumer and consent legs must resolve it from the IdP
34- # request ID stored in InResponseTo.
3560 Scenario : A user authenticating without the WAYF completes the full flow
3661 Given an Identity Provider named "CorrId-IdP-Only"
3762 When I log in at "CorrId-SP"
38- And I pass through EngineBlock
39- And I pass through the IdP
40- And I give my consent
41- And I pass through EngineBlock
63+ And I pass through EngineBlock
64+ And I pass through the IdP
65+ And I give my consent
66+ And I pass through EngineBlock
4267 Then the url should match "functional-testing/CorrId-SP/acs"
68+ And I dump the log records
69+ And the following log messages should have a correlation_id:
70+ | message |
71+ | HTTP -Post : Sending Message |
72+ | Done calling service 'singleSignOnService ' |
73+ | /SP is not configured for MFA for IdP , or for transparant AuthnContext , skipping validation of .*/ |
74+ | Verifying if schacHomeOrganization is allowed by configured IdP shibmd :scopes |
75+ | No shibmd :scope found in the IdP metadata , not verifying schacHomeOrganization |
76+ | Verifying if eduPersonPrincipalName is allowed by configured IdP shibmd :scopes |
77+ | No shibmd :scope found in the IdP metadata , not verifying eduPersonPrincipalName |
78+ | Verifying if subject -id is allowed by configured IdP shibmd :scopes |
79+ | No shibmd :scope found in the IdP metadata , not verifying subject -id |
80+ | /No Attribute Aggregation for https :\/\/engine .dev .openconext .local \/functional -testing \/CorrId -S .*/ |
81+ | /No SBS interrupt for serviceProvider : https :\/\/engine .dev .openconext .local \/functional -testin .*/ |
82+ | StepupDecision : determine highest LoA |
83+ | StepupDecision : no level set , no Stepup required |
84+ | Handle Consent authentication callout |
85+ | Using internal binding for destination /authentication /idp /provide -consent |
86+ | Calling service 'provideConsentService ' |
87+ | Done calling service 'provideConsentService ' |
88+ | Done calling service 'assertionConsumerService ' |
89+ | /Using internal binding for destination .*/ |
90+ | Calling service 'processedAssertionConsumerService ' |
91+ | /No ARP available for https :\/\/engine .dev .openconext .local \/functional -testing \/CorrId -SP \/metadata . */ |
92+ | Executing the ApplyTrustedProxyBehavior output filter |
93+ | Executing the AddIdentityAttributes output filter |
94+ | Resolving a persistent nameId |
95+ | Setting the NameId on the Assertion |
96+ | Adding the EduPersonTargetedId on the Assertion |
97+ | /Attribute Denormalization : Adding alias 'urn :oid :0 .9 .2342 .19200300 .100 .1 .1 '*/ |
98+ | /Attribute Denormalization : Adding alias 'urn :oid :1 .3 .6 .1 .4 .1 .25178 .1 .2 .9 ' f */ |
99+ | /Attribute Denormalization : Adding alias 'urn :oid :1 .3 .6 .1 .4 .1 .5923 .1 .1 .1 .10 ' */ |
100+ | login granted |
101+ | HTTP -Post : Sending Message |
102+ | Done calling service 'processedAssertionConsumerService ' |
103+ | Done calling service 'processConsentService ' |
43104
44- # ── Concurrent flows ────────────────────────────────────────────────────────
45- # Two simultaneous authentications in separate browser tabs share the same PHP
46- # session. Each flow must mint its own correlation ID and the two IDs must
47- # not bleed into each other. Both flows must complete successfully and land
48- # on the correct SP ACS URL.
49- # Requires the @functional tag to use the Chrome driver (browser tabs need JS).
50105 @functional
51106 Scenario : Two concurrent authentication flows each complete independently
52107 Given an Identity Provider named "CorrId-IdP-A"
53- And an Identity Provider named "CorrId-IdP-B"
108+ And an Identity Provider named "CorrId-IdP-B"
54109 When I open 2 browser tabs identified by "Tab-A, Tab-B"
55- And I switch to "Tab-A"
56- And I log in at "CorrId-SP"
57- And I select "CorrId-IdP-A" on the WAYF
58- And I switch to "Tab-B"
59- And I log in at "CorrId-SP"
60- And I select "CorrId-IdP-B" on the WAYF
61- And I pass through the IdP
62- And I give my consent
110+ And I switch to "Tab-A"
111+ And I log in at "CorrId-SP"
112+ And I select "CorrId-IdP-A" on the WAYF
113+ And I switch to "Tab-B"
114+ And I log in at "CorrId-SP"
115+ And I select "CorrId-IdP-B" on the WAYF
116+ And I pass through the IdP
117+ And I give my consent
63118 Then the url should match "functional-testing/CorrId-SP/acs"
64- And I switch to "Tab-A"
65- And I pass through the IdP
66- And I give my consent
119+ And I switch to "Tab-A"
120+ And I pass through the IdP
121+ And I give my consent
67122 Then the url should match "functional-testing/CorrId-SP/acs"
0 commit comments