@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2020 - 2023 the original author or authors .
* Copyright 2020 - 2025 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 .
@ -34,6 +34,7 @@ import org.springframework.security.oauth2.core.OAuth2Error;
@@ -34,6 +34,7 @@ import org.springframework.security.oauth2.core.OAuth2Error;
import org.springframework.security.oauth2.core.OAuth2ErrorCodes ;
import org.springframework.security.oauth2.core.OAuth2UserCode ;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames ;
import org.springframework.security.oauth2.core.oidc.OidcScopes ;
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization ;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService ;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient ;
@ -165,6 +166,23 @@ public class OAuth2DeviceAuthorizationRequestAuthenticationProviderTests {
@@ -165,6 +166,23 @@ public class OAuth2DeviceAuthorizationRequestAuthenticationProviderTests {
// @formatter:on
}
@Test
public void authenticateWhenOpenIdScopeThenThrowOAuth2AuthenticationException ( ) {
RegisteredClient registeredClient = TestRegisteredClients . registeredClient ( )
. authorizationGrantType ( AuthorizationGrantType . DEVICE_CODE )
. scope ( OidcScopes . OPENID )
. build ( ) ;
Authentication authentication = createAuthentication ( registeredClient ) ;
// @formatter:off
assertThatExceptionOfType ( OAuth2AuthenticationException . class )
. isThrownBy ( ( ) - > this . authenticationProvider . authenticate ( authentication ) )
. withMessageContaining ( OAuth2ParameterNames . SCOPE )
. extracting ( OAuth2AuthenticationException : : getError )
. extracting ( OAuth2Error : : getErrorCode )
. isEqualTo ( OAuth2ErrorCodes . INVALID_SCOPE ) ;
// @formatter:on
}
@Test
public void authenticateWhenDeviceCodeIsNullThenThrowOAuth2AuthenticationException ( ) {
@SuppressWarnings ( "unchecked" )