Skip to content

Commit 4698aec

Browse files
committed
Use current authentication for device authorization
Issue gh-1189
1 parent 95ef79a commit 4698aec

File tree

1 file changed

+3
-39
lines changed

1 file changed

+3
-39
lines changed

Diff for: samples/messages-client/src/main/java/sample/web/DeviceController.java

+3-39
Original file line numberDiff line numberDiff line change
@@ -22,30 +22,19 @@
2222
import java.util.Objects;
2323
import java.util.Set;
2424

25-
import jakarta.servlet.http.HttpServletRequest;
26-
import jakarta.servlet.http.HttpServletResponse;
27-
2825
import org.springframework.beans.factory.annotation.Value;
2926
import org.springframework.core.ParameterizedTypeReference;
3027
import org.springframework.http.HttpStatus;
3128
import org.springframework.http.MediaType;
3229
import org.springframework.http.ResponseEntity;
33-
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
34-
import org.springframework.security.core.authority.AuthorityUtils;
35-
import org.springframework.security.core.context.SecurityContext;
36-
import org.springframework.security.core.context.SecurityContextHolder;
37-
import org.springframework.security.core.context.SecurityContextHolderStrategy;
3830
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
3931
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
4032
import org.springframework.security.oauth2.client.registration.ClientRegistration;
4133
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
4234
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
4335
import org.springframework.security.oauth2.core.OAuth2AuthorizationException;
44-
import org.springframework.security.oauth2.core.OAuth2DeviceCode;
4536
import org.springframework.security.oauth2.core.OAuth2Error;
4637
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
47-
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
48-
import org.springframework.security.web.context.SecurityContextRepository;
4938
import org.springframework.stereotype.Controller;
5039
import org.springframework.ui.Model;
5140
import org.springframework.util.LinkedMultiValueMap;
@@ -83,12 +72,6 @@ public class DeviceController {
8372

8473
private final String messagesBaseUri;
8574

86-
private final SecurityContextRepository securityContextRepository =
87-
new HttpSessionSecurityContextRepository();
88-
89-
private final SecurityContextHolderStrategy securityContextHolderStrategy =
90-
SecurityContextHolder.getContextHolderStrategy();
91-
9275
public DeviceController(ClientRegistrationRepository clientRegistrationRepository, WebClient webClient,
9376
@Value("${messages.base-uri}") String messagesBaseUri) {
9477

@@ -98,7 +81,7 @@ public DeviceController(ClientRegistrationRepository clientRegistrationRepositor
9881
}
9982

10083
@GetMapping("/device_authorize")
101-
public String authorize(Model model, HttpServletRequest request, HttpServletResponse response) {
84+
public String authorize(Model model) {
10285
// @formatter:off
10386
ClientRegistration clientRegistration =
10487
this.clientRegistrationRepository.findByRegistrationId(
@@ -143,13 +126,9 @@ public String authorize(Model model, HttpServletRequest request, HttpServletResp
143126
Instant issuedAt = Instant.now();
144127
Integer expiresIn = (Integer) responseParameters.get(OAuth2ParameterNames.EXPIRES_IN);
145128
Instant expiresAt = issuedAt.plusSeconds(expiresIn);
146-
String deviceCodeValue = (String) responseParameters.get(OAuth2ParameterNames.DEVICE_CODE);
147129

148-
OAuth2DeviceCode deviceCode = new OAuth2DeviceCode(deviceCodeValue, issuedAt, expiresAt);
149-
saveSecurityContext(deviceCode, request, response);
150-
151-
model.addAttribute("deviceCode", deviceCode.getTokenValue());
152-
model.addAttribute("expiresAt", deviceCode.getExpiresAt());
130+
model.addAttribute("deviceCode", responseParameters.get(OAuth2ParameterNames.DEVICE_CODE));
131+
model.addAttribute("expiresAt", expiresAt);
153132
model.addAttribute("userCode", responseParameters.get(OAuth2ParameterNames.USER_CODE));
154133
model.addAttribute("verificationUri", responseParameters.get(OAuth2ParameterNames.VERIFICATION_URI));
155134
// Note: You could use a QR-code to display this URL
@@ -210,19 +189,4 @@ public String authorized(Model model,
210189
return "index";
211190
}
212191

213-
private void saveSecurityContext(OAuth2DeviceCode deviceCode, HttpServletRequest request,
214-
HttpServletResponse response) {
215-
216-
// @formatter:off
217-
UsernamePasswordAuthenticationToken deviceAuthentication =
218-
UsernamePasswordAuthenticationToken.authenticated(
219-
deviceCode, null, AuthorityUtils.createAuthorityList("ROLE_DEVICE"));
220-
// @formatter:on
221-
222-
SecurityContext securityContext = this.securityContextHolderStrategy.createEmptyContext();
223-
securityContext.setAuthentication(deviceAuthentication);
224-
this.securityContextHolderStrategy.setContext(securityContext);
225-
this.securityContextRepository.saveContext(securityContext, request, response);
226-
}
227-
228192
}

0 commit comments

Comments
 (0)