Skip to content

Commit 478be90

Browse files
phavekesoharsta
authored andcommitted
Catch oauth2 exceptions. Fixes #339 and #338
1 parent ee1fa50 commit 478be90

1 file changed

Lines changed: 33 additions & 4 deletions

File tree

oidc/src/main/java/oidc/endpoints/UserInfoEndpoint.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
import oidc.model.AccessToken;
1212
import oidc.model.User;
1313
import oidc.repository.AccessTokenRepository;
14+
import oidc.saml.AuthnRequestContextConsumer;
1415
import oidc.secure.TokenGenerator;
16+
import org.apache.commons.logging.Log;
17+
import org.apache.commons.logging.LogFactory;
1518
import org.springframework.http.HttpStatus;
1619
import org.springframework.http.MediaType;
1720
import org.springframework.http.ResponseEntity;
@@ -30,19 +33,45 @@ public class UserInfoEndpoint {
3033
private final AccessTokenRepository accessTokenRepository;
3134
private final TokenGenerator tokenGenerator;
3235

36+
private static final Log LOG = LogFactory.getLog(AuthnRequestContextConsumer.class);
37+
3338
public UserInfoEndpoint(AccessTokenRepository accessTokenRepository, TokenGenerator tokenGenerator) {
3439
this.accessTokenRepository = accessTokenRepository;
3540
this.tokenGenerator = tokenGenerator;
3641
}
3742

3843
@GetMapping("oidc/userinfo")
39-
public ResponseEntity<Map<String, Object>> getUserInfo(HttpServletRequest request) throws IOException, ParseException, java.text.ParseException {
40-
return userInfo(request);
44+
public ResponseEntity<Map<String, Object>> getUserInfo(HttpServletRequest request)
45+
throws IOException, java.text.ParseException {
46+
try {
47+
return userInfo(request);
48+
} catch (com.nimbusds.oauth2.sdk.ParseException e) {
49+
return handleMissingToken(e, request);
50+
}
4151
}
4252

4353
@PostMapping(value = {"oidc/userinfo"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
44-
public ResponseEntity<Map<String, Object>> postUserInfo(HttpServletRequest request) throws ParseException, IOException, java.text.ParseException {
45-
return userInfo(request);
54+
public ResponseEntity<Map<String, Object>> postUserInfo(HttpServletRequest request)
55+
throws IOException, java.text.ParseException {
56+
try {
57+
return userInfo(request);
58+
} catch (com.nimbusds.oauth2.sdk.ParseException e) {
59+
return handleMissingToken(e, request);
60+
}
61+
}
62+
63+
private ResponseEntity<Map<String, Object>> handleMissingToken(com.nimbusds.oauth2.sdk.ParseException e, HttpServletRequest request) {
64+
LOG.warn(String.format("UserInfo request failed: %s | Path: %s | IP: %s",
65+
e.getMessage(), request.getRequestURI(), request.getRemoteAddr()));
66+
67+
Map<String, Object> body = new HashMap<>();
68+
body.put("error", "invalid_request");
69+
body.put("error_description", e.getMessage());
70+
71+
return ResponseEntity
72+
.status(HttpStatus.UNAUTHORIZED)
73+
.header("WWW-Authenticate", "Bearer error=\"invalid_request\", error_description=\"Missing access token\"")
74+
.body(body);
4675
}
4776

4877
private ResponseEntity<Map<String, Object>> userInfo(HttpServletRequest request) throws ParseException, IOException, java.text.ParseException {

0 commit comments

Comments
 (0)