@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2020 the original author or authors .
* Copyright 2002 - 2022 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -25,6 +25,7 @@ import org.mockito.Mock;
@@ -25,6 +25,7 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension ;
import org.springframework.core.convert.converter.Converter ;
import org.springframework.security.authentication.AbstractAuthenticationToken ;
import org.springframework.security.core.AuthenticationException ;
import org.springframework.security.oauth2.core.OAuth2AuthenticationException ;
import org.springframework.security.oauth2.jwt.BadJwtException ;
@ -43,12 +44,13 @@ import static org.mockito.Mockito.mock;
@@ -43,12 +44,13 @@ import static org.mockito.Mockito.mock;
* Tests for { @link JwtAuthenticationProvider }
*
* @author Josh Cummings
* @author Jerome Wacongne ch4mp & # 64 ; c4 - soft . com
* /
@ExtendWith ( MockitoExtension . class )
public class JwtAuthenticationProviderTests {
@Mock
Converter < Jwt , Jw tAuthenticationToken> jwtAuthenticationConverter ;
Converter < Jwt , Abstrac tAuthenticationToken> jwtAuthenticationConverter ;
@Mock
JwtDecoder jwtDecoder ;
@ -107,6 +109,17 @@ public class JwtAuthenticationProviderTests {
@@ -107,6 +109,17 @@ public class JwtAuthenticationProviderTests {
@Test
public void authenticateWhenConverterReturnsAuthenticationThenProviderPropagatesIt ( ) {
BearerTokenAuthenticationToken token = this . authentication ( ) ;
Jwt jwt = TestJwts . jwt ( ) . build ( ) ;
JwtAuthenticationToken authentication = new JwtAuthenticationToken ( jwt ) ;
given ( this . jwtDecoder . decode ( token . getToken ( ) ) ) . willReturn ( jwt ) ;
given ( this . jwtAuthenticationConverter . convert ( jwt ) ) . willReturn ( authentication ) ;
assertThat ( this . provider . authenticate ( token ) ) . isEqualTo ( authentication ) ;
}
@Test
public void authenticateWhenConverterDoesNotSetAuthenticationDetailsThenProviderSetsItWithTokenDetails ( ) {
BearerTokenAuthenticationToken token = this . authentication ( ) ;
Object details = mock ( Object . class ) ;
token . setDetails ( details ) ;
@ -121,6 +134,24 @@ public class JwtAuthenticationProviderTests {
@@ -121,6 +134,24 @@ public class JwtAuthenticationProviderTests {
// @formatter:on
}
@Test
public void authenticateWhenConverterSetsAuthenticationDetailsThenProviderDoesNotOverwriteIt ( ) {
BearerTokenAuthenticationToken token = this . authentication ( ) ;
Object details = mock ( Object . class ) ;
token . setDetails ( details ) ;
Jwt jwt = TestJwts . jwt ( ) . build ( ) ;
JwtAuthenticationToken authentication = new JwtAuthenticationToken ( jwt ) ;
Object expectedDetails = "To be kept as is" ;
authentication . setDetails ( expectedDetails ) ;
given ( this . jwtDecoder . decode ( token . getToken ( ) ) ) . willReturn ( jwt ) ;
given ( this . jwtAuthenticationConverter . convert ( jwt ) ) . willReturn ( authentication ) ;
// @formatter:off
assertThat ( this . provider . authenticate ( token ) )
. isEqualTo ( authentication ) . hasFieldOrPropertyWithValue ( "details" ,
expectedDetails ) ;
// @formatter:on
}
@Test
public void supportsWhenBearerTokenAuthenticationTokenThenReturnsTrue ( ) {
assertThat ( this . provider . supports ( BearerTokenAuthenticationToken . class ) ) . isTrue ( ) ;