|
@@ -29,6 +29,8 @@ import org.junit.jupiter.api.Test;
|
|
|
import org.mockito.ArgumentCaptor;
|
|
import org.mockito.ArgumentCaptor;
|
|
|
import org.mockito.stubbing.Answer;
|
|
import org.mockito.stubbing.Answer;
|
|
|
|
|
|
|
|
|
|
+import org.springframework.security.authentication.SecurityAssertions;
|
|
|
|
|
+import org.springframework.security.core.Authentication;
|
|
|
import org.springframework.security.core.GrantedAuthority;
|
|
import org.springframework.security.core.GrantedAuthority;
|
|
|
import org.springframework.security.core.authority.AuthorityUtils;
|
|
import org.springframework.security.core.authority.AuthorityUtils;
|
|
|
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
|
|
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
|
|
@@ -48,6 +50,7 @@ import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResp
|
|
|
import org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationRequests;
|
|
import org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationRequests;
|
|
|
import org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationResponses;
|
|
import org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationResponses;
|
|
|
import org.springframework.security.oauth2.core.user.OAuth2User;
|
|
import org.springframework.security.oauth2.core.user.OAuth2User;
|
|
|
|
|
+import org.springframework.security.oauth2.core.user.TestOAuth2Users;
|
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
|
@@ -56,6 +59,7 @@ import static org.mockito.ArgumentMatchers.any;
|
|
|
import static org.mockito.ArgumentMatchers.anyCollection;
|
|
import static org.mockito.ArgumentMatchers.anyCollection;
|
|
|
import static org.mockito.BDDMockito.given;
|
|
import static org.mockito.BDDMockito.given;
|
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.mock;
|
|
|
|
|
+import static org.mockito.Mockito.verify;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Tests for {@link OAuth2LoginAuthenticationProvider}.
|
|
* Tests for {@link OAuth2LoginAuthenticationProvider}.
|
|
@@ -187,7 +191,8 @@ public class OAuth2LoginAuthenticationProviderTests {
|
|
|
this.authenticationProvider.setAuthoritiesMapper(authoritiesMapper);
|
|
this.authenticationProvider.setAuthoritiesMapper(authoritiesMapper);
|
|
|
OAuth2LoginAuthenticationToken authentication = (OAuth2LoginAuthenticationToken) this.authenticationProvider
|
|
OAuth2LoginAuthenticationToken authentication = (OAuth2LoginAuthenticationToken) this.authenticationProvider
|
|
|
.authenticate(new OAuth2LoginAuthenticationToken(this.clientRegistration, this.authorizationExchange));
|
|
.authenticate(new OAuth2LoginAuthenticationToken(this.clientRegistration, this.authorizationExchange));
|
|
|
- assertThat(authentication.getAuthorities()).isEqualTo(mappedAuthorities);
|
|
|
|
|
|
|
+ verify(authoritiesMapper).mapAuthorities(any());
|
|
|
|
|
+ SecurityAssertions.assertThat(authentication).authorities().containsAll(mappedAuthorities);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// gh-5368
|
|
// gh-5368
|
|
@@ -206,6 +211,17 @@ public class OAuth2LoginAuthenticationProviderTests {
|
|
|
.containsAllEntriesOf(accessTokenResponse.getAdditionalParameters());
|
|
.containsAllEntriesOf(accessTokenResponse.getAdditionalParameters());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void authenticateWhenLoginSuccessThenIssuesFactor() {
|
|
|
|
|
+ OAuth2AccessTokenResponse accessTokenResponse = accessTokenSuccessResponse();
|
|
|
|
|
+ given(this.accessTokenResponseClient.getTokenResponse(any())).willReturn(accessTokenResponse);
|
|
|
|
|
+ given(this.userService.loadUser(any())).willReturn(TestOAuth2Users.create());
|
|
|
|
|
+ Authentication request = new OAuth2LoginAuthenticationToken(this.clientRegistration,
|
|
|
|
|
+ this.authorizationExchange);
|
|
|
|
|
+ Authentication result = this.authenticationProvider.authenticate(request);
|
|
|
|
|
+ SecurityAssertions.assertThat(result).hasAuthority("FACTOR_AUTHORIZATION_CODE");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private OAuth2AccessTokenResponse accessTokenSuccessResponse() {
|
|
private OAuth2AccessTokenResponse accessTokenSuccessResponse() {
|
|
|
Instant expiresAt = Instant.now().plusSeconds(5);
|
|
Instant expiresAt = Instant.now().plusSeconds(5);
|
|
|
Set<String> scopes = new LinkedHashSet<>(Arrays.asList("scope1", "scope2"));
|
|
Set<String> scopes = new LinkedHashSet<>(Arrays.asList("scope1", "scope2"));
|