add support for redirect-uris key for oauth2 bindings (#70)

This commit is contained in:
Daniel Garnier-Moiroux
2022-05-19 20:41:18 +02:00
committed by GitHub
parent ac28f74c7a
commit 5ab708ff04
3 changed files with 47 additions and 1 deletions

View File

@@ -291,7 +291,7 @@ Disable Property: `org.springframework.cloud.bindings.boot.oauth2.enable`
| `spring.security.oauth2.client.registration.{name}.client-name` | `{client-name}`
| `spring.security.oauth2.client.registration.{name}.client-authentication-method` | `{client-authentication-method}`
| `spring.security.oauth2.client.registration.{name}.authorization-grant-type` | `{authorization-grant-type}` or if not set then `{authorization-grant-types}` if it contains only one value (comma-separated)
| `spring.security.oauth2.client.registration.{name}.redirect-uri` | `{redirect-uri}`
| `spring.security.oauth2.client.registration.{name}.redirect-uri` | `{redirect-uri}` or if not set then `{redirect-uris}` if it contains only one value (comma-separated)
| `spring.security.oauth2.client.registration.{name}.scope` | `{scope}`
| `spring.security.oauth2.client.provider.{provider}.issuer-uri` | `{issuer-uri}`
| `spring.security.oauth2.client.provider.{provider}.authorization-uri` | `{authorization-uri}`

View File

@@ -64,6 +64,9 @@ public final class SpringSecurityOAuth2BindingsPropertiesProcessor implements Bi
.when(SpringSecurityOAuth2BindingsPropertiesProcessor::hasSingleValue)
.toIfAbsent(String.format("spring.security.oauth2.client.registration.%s.authorization-grant-type", clientName));
map.from("redirect-uri").to(String.format("spring.security.oauth2.client.registration.%s.redirect-uri", clientName));
map.from("redirect-uris")
.when(SpringSecurityOAuth2BindingsPropertiesProcessor::hasSingleValue)
.toIfAbsent(String.format("spring.security.oauth2.client.registration.%s.redirect-uri", clientName));
map.from("scope").to(String.format("spring.security.oauth2.client.registration.%s.scope", clientName));
map.from("client-name").to(String.format("spring.security.oauth2.client.registration.%s.client-name", clientName));
map.from("issuer-uri").to(String.format("spring.security.oauth2.client.provider.%s.issuer-uri", provider));

View File

@@ -166,6 +166,49 @@ final class SpringSecurityOAuth2BindingsPropertiesProcessorTest {
.containsEntry("spring.security.oauth2.client.registration.binding-name.authorization-grant-type", "client_credentials");
}
@Test
@DisplayName("contributes a redirect-uri is there is only one in redirect-uris")
void testRedirectUrisOneEntry() {
Bindings bindings = new Bindings(new Binding("binding-name", Paths.get("test-path"),
new FluentMap()
.withEntry(Binding.TYPE, TYPE)
.withEntry("provider", "some-provider")
.withEntry("redirect-uris", "https://app.example.com/authorized")
));
new SpringSecurityOAuth2BindingsPropertiesProcessor().process(new MockEnvironment(), bindings, properties);
assertThat(properties)
.containsEntry("spring.security.oauth2.client.registration.binding-name.redirect-uri", "https://app.example.com/authorized");
}
@Test
@DisplayName("does not contributes a redirect-uri is there are multiple entries in redirect-uris")
void testRedirectUrisMultipleEntries() {
Bindings bindings = new Bindings(new Binding("binding-name", Paths.get("test-path"),
new FluentMap()
.withEntry(Binding.TYPE, TYPE)
.withEntry("provider", "some-provider")
.withEntry("redirect-uris", "https://app.example.com/authorized,https://other-app.example.com/login")
));
new SpringSecurityOAuth2BindingsPropertiesProcessor().process(new MockEnvironment(), bindings, properties);
assertThat(properties)
.doesNotContainKey("spring.security.oauth2.client.registration.binding-name.redirect-uri");
}
@Test
@DisplayName("uses the value from redirect-uri if redirect-uris is also present")
void testRedirectUriAndRedirectUris() {
Bindings bindings = new Bindings(new Binding("binding-name", Paths.get("test-path"),
new FluentMap()
.withEntry(Binding.TYPE, TYPE)
.withEntry("provider", "some-provider")
.withEntry("redirect-uris", "https://app.example.com/authorized")
.withEntry("redirect-uri", "https://other-app.example.com/login")
));
new SpringSecurityOAuth2BindingsPropertiesProcessor().process(new MockEnvironment(), bindings, properties);
assertThat(properties)
.containsEntry("spring.security.oauth2.client.registration.binding-name.redirect-uri", "https://other-app.example.com/login");
}
@Test
@DisplayName("can be disabled")
void disabled() {