|
23 | 23 | import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration;
|
24 | 24 |
|
25 | 25 | import static org.springframework.security.saml2.provider.service.servlet.filter.TestSaml2SigningCredentials.signingCredential;
|
26 |
| -import static org.assertj.core.api.Assertions.*; |
| 26 | +import static org.assertj.core.api.Assertions.assertThat; |
| 27 | +import static org.assertj.core.api.Assertions.assertThatCode; |
27 | 28 |
|
| 29 | +/** |
| 30 | + * Tests for {@link DefaultSaml2AuthenticationRequestContextResolver} |
| 31 | + * |
| 32 | + * @author Shazin Sadakath |
| 33 | + * @author Josh Cummings |
| 34 | + */ |
28 | 35 | public class DefaultSaml2AuthenticationRequestContextResolverTests {
|
29 | 36 |
|
30 |
| - private static final String IDP_SSO_URL = "https://sso-url.example.com/IDP/SSO"; |
31 |
| - private static final String TEMPLATE = "template"; |
| 37 | + private static final String ASSERTING_PARTY_SSO_URL = "https://idp.example.com/sso"; |
| 38 | + private static final String RELYING_PARTY_SSO_URL = "https://sp.example.com/sso"; |
| 39 | + private static final String ASSERTING_PARTY_ENTITY_ID = "asserting-party-entity-id"; |
| 40 | + private static final String RELYING_PARTY_ENTITY_ID = "relying-party-entity-id"; |
32 | 41 | private static final String REGISTRATION_ID = "registration-id";
|
33 |
| - private static final String IDP_ENTITY_ID = "idp-entity-id"; |
34 | 42 |
|
35 | 43 | private MockHttpServletRequest request;
|
36 |
| - private RelyingPartyRegistration.Builder rpBuilder; |
37 |
| - private Saml2AuthenticationRequestContextResolver authenticationRequestContextResolver = new DefaultSaml2AuthenticationRequestContextResolver(); |
| 44 | + private RelyingPartyRegistration.Builder relyingPartyBuilder; |
| 45 | + private Saml2AuthenticationRequestContextResolver authenticationRequestContextResolver |
| 46 | + = new DefaultSaml2AuthenticationRequestContextResolver(); |
38 | 47 |
|
39 | 48 | @Before
|
40 | 49 | public void setup() {
|
41 |
| - request = new MockHttpServletRequest(); |
42 |
| - rpBuilder = RelyingPartyRegistration |
| 50 | + this.request = new MockHttpServletRequest(); |
| 51 | + this.relyingPartyBuilder = RelyingPartyRegistration |
43 | 52 | .withRegistrationId(REGISTRATION_ID)
|
44 |
| - .providerDetails(c -> c.entityId(IDP_ENTITY_ID)) |
45 |
| - .providerDetails(c -> c.webSsoUrl(IDP_SSO_URL)) |
46 |
| - .assertionConsumerServiceUrlTemplate(TEMPLATE) |
| 53 | + .localEntityIdTemplate(RELYING_PARTY_ENTITY_ID) |
| 54 | + .providerDetails(c -> c.entityId(ASSERTING_PARTY_ENTITY_ID)) |
| 55 | + .providerDetails(c -> c.webSsoUrl(ASSERTING_PARTY_SSO_URL)) |
| 56 | + .assertionConsumerServiceUrlTemplate(RELYING_PARTY_SSO_URL) |
47 | 57 | .credentials(c -> c.add(signingCredential()));
|
48 | 58 | }
|
49 | 59 |
|
50 | 60 | @Test
|
51 |
| - public void resoleWhenRequestAndRelyingPartyNotNullThenCreateSaml2AuthenticationRequestContext() { |
52 |
| - Saml2AuthenticationRequestContext authenticationRequestContext = authenticationRequestContextResolver.resolve(request, rpBuilder.build()); |
| 61 | + public void resolveWhenRequestAndRelyingPartyNotNullThenCreateSaml2AuthenticationRequestContext() { |
| 62 | + this.request.addParameter("RelayState", "relay-state"); |
| 63 | + RelyingPartyRegistration relyingParty = this.relyingPartyBuilder.build(); |
| 64 | + Saml2AuthenticationRequestContext context = |
| 65 | + this.authenticationRequestContextResolver.resolve(this.request, relyingParty); |
| 66 | + |
| 67 | + assertThat(context).isNotNull(); |
| 68 | + assertThat(context.getAssertionConsumerServiceUrl()).isEqualTo(RELYING_PARTY_SSO_URL); |
| 69 | + assertThat(context.getRelayState()).isEqualTo("relay-state"); |
| 70 | + assertThat(context.getDestination()).isEqualTo(ASSERTING_PARTY_SSO_URL); |
| 71 | + assertThat(context.getIssuer()).isEqualTo(RELYING_PARTY_ENTITY_ID); |
| 72 | + assertThat(context.getRelyingPartyRegistration()).isSameAs(relyingParty); |
| 73 | + } |
| 74 | + |
| 75 | + @Test |
| 76 | + public void resolveWhenAssertionConsumerServiceUrlTemplateContainsRegistrationIdThenResolves() { |
| 77 | + RelyingPartyRegistration relyingParty = this.relyingPartyBuilder |
| 78 | + .assertionConsumerServiceUrlTemplate("/saml2/authenticate/{registrationId}") |
| 79 | + .build(); |
| 80 | + Saml2AuthenticationRequestContext context = |
| 81 | + this.authenticationRequestContextResolver.resolve(this.request, relyingParty); |
| 82 | + |
| 83 | + assertThat(context.getAssertionConsumerServiceUrl()).isEqualTo("/saml2/authenticate/registration-id"); |
| 84 | + } |
| 85 | + |
| 86 | + @Test |
| 87 | + public void resolveWhenAssertionConsumerServiceUrlTemplateContainsBaseUrlThenResolves() { |
| 88 | + RelyingPartyRegistration relyingParty = this.relyingPartyBuilder |
| 89 | + .assertionConsumerServiceUrlTemplate("{baseUrl}/saml2/authenticate/{registrationId}") |
| 90 | + .build(); |
| 91 | + Saml2AuthenticationRequestContext context = |
| 92 | + this.authenticationRequestContextResolver.resolve(this.request, relyingParty); |
53 | 93 |
|
54 |
| - assertThat(authenticationRequestContext).isNotNull(); |
55 |
| - assertThat(authenticationRequestContext.getAssertionConsumerServiceUrl()).isEqualTo(TEMPLATE); |
56 |
| - assertThat(authenticationRequestContext.getRelyingPartyRegistration().getRegistrationId()).isEqualTo(REGISTRATION_ID); |
57 |
| - assertThat(authenticationRequestContext.getRelyingPartyRegistration().getProviderDetails().getEntityId()).isEqualTo(IDP_ENTITY_ID); |
58 |
| - assertThat(authenticationRequestContext.getRelyingPartyRegistration().getProviderDetails().getWebSsoUrl()).isEqualTo(IDP_SSO_URL); |
59 |
| - assertThat(authenticationRequestContext.getRelyingPartyRegistration().getCredentials()).isNotEmpty(); |
| 94 | + assertThat(context.getAssertionConsumerServiceUrl()) |
| 95 | + .isEqualTo("http://localhost/saml2/authenticate/registration-id"); |
60 | 96 | }
|
61 | 97 |
|
62 |
| - @Test(expected = IllegalArgumentException.class) |
63 |
| - public void resolveWhenRequestAndRelyingPartyNullThenException() { |
64 |
| - authenticationRequestContextResolver.resolve(null, null); |
| 98 | + @Test |
| 99 | + public void resolveWhenRequestNullThenException() { |
| 100 | + assertThatCode(() -> |
| 101 | + this.authenticationRequestContextResolver.resolve(this.request, null)) |
| 102 | + .isInstanceOf(IllegalArgumentException.class); |
| 103 | + } |
| 104 | + |
| 105 | + @Test |
| 106 | + public void resolveWhenRelyingPartyNullThenException() { |
| 107 | + assertThatCode(() -> |
| 108 | + this.authenticationRequestContextResolver.resolve(null, this.relyingPartyBuilder.build())) |
| 109 | + .isInstanceOf(IllegalArgumentException.class); |
65 | 110 | }
|
66 | 111 | }
|
0 commit comments