|
9 | 9 | import com.google.common.collect.Maps;
|
10 | 10 | import io.jans.as.common.model.common.User;
|
11 | 11 | import io.jans.as.common.model.registration.Client;
|
| 12 | +import io.jans.as.common.model.session.SessionId; |
| 13 | +import io.jans.as.common.model.session.SessionIdState; |
12 | 14 | import io.jans.as.common.util.RedirectUri;
|
13 | 15 | import io.jans.as.model.authorize.AuthorizeErrorResponseType;
|
14 | 16 | import io.jans.as.model.authorize.AuthorizeRequestParam;
|
15 | 17 | import io.jans.as.model.authorize.AuthorizeResponseParam;
|
16 |
| -import io.jans.as.model.common.BackchannelTokenDeliveryMode; |
17 |
| -import io.jans.as.model.common.GrantType; |
18 |
| -import io.jans.as.model.common.Prompt; |
19 |
| -import io.jans.as.model.common.ResponseMode; |
20 |
| -import io.jans.as.model.common.ResponseType; |
21 |
| -import io.jans.as.model.common.ScopeConstants; |
22 |
| -import io.jans.as.model.common.SubjectType; |
| 18 | +import io.jans.as.model.common.*; |
23 | 19 | import io.jans.as.model.configuration.AppConfiguration;
|
24 | 20 | import io.jans.as.model.crypto.binding.TokenBindingMessage;
|
25 | 21 | import io.jans.as.model.crypto.binding.TokenBindingParseException;
|
|
32 | 28 | import io.jans.as.server.ciba.CIBAPushTokenDeliveryService;
|
33 | 29 | import io.jans.as.server.model.authorize.AuthorizeParamsValidator;
|
34 | 30 | import io.jans.as.server.model.authorize.ScopeChecker;
|
35 |
| -import io.jans.as.server.model.common.AccessToken; |
36 |
| -import io.jans.as.server.model.common.AuthorizationCode; |
37 |
| -import io.jans.as.server.model.common.AuthorizationGrant; |
38 |
| -import io.jans.as.server.model.common.AuthorizationGrantList; |
39 |
| -import io.jans.as.server.model.common.CIBAGrant; |
40 |
| -import io.jans.as.server.model.common.CibaRequestCacheControl; |
41 |
| -import io.jans.as.server.model.common.CibaRequestStatus; |
42 |
| -import io.jans.as.server.model.common.DefaultScope; |
43 |
| -import io.jans.as.server.model.common.DeviceAuthorizationCacheControl; |
44 |
| -import io.jans.as.server.model.common.DeviceAuthorizationStatus; |
45 |
| -import io.jans.as.server.model.common.DeviceCodeGrant; |
46 |
| -import io.jans.as.server.model.common.ExecutionContext; |
47 |
| -import io.jans.as.server.model.common.IdToken; |
48 |
| -import io.jans.as.server.model.common.RefreshToken; |
49 |
| -import io.jans.as.common.model.session.SessionId; |
50 |
| -import io.jans.as.common.model.session.SessionIdState; |
| 31 | +import io.jans.as.server.model.common.*; |
51 | 32 | import io.jans.as.server.model.config.ConfigurationFactory;
|
52 | 33 | import io.jans.as.server.model.config.Constants;
|
53 | 34 | import io.jans.as.server.model.exception.AcrChangedException;
|
|
56 | 37 | import io.jans.as.server.model.ldap.ClientAuthorization;
|
57 | 38 | import io.jans.as.server.model.token.JwrService;
|
58 | 39 | import io.jans.as.server.security.Identity;
|
59 |
| -import io.jans.as.server.service.AttributeService; |
60 |
| -import io.jans.as.server.service.AuthenticationFilterService; |
61 |
| -import io.jans.as.server.service.ClientAuthorizationsService; |
62 |
| -import io.jans.as.server.service.ClientService; |
63 |
| -import io.jans.as.server.service.CookieService; |
64 |
| -import io.jans.as.server.service.DeviceAuthorizationService; |
65 |
| -import io.jans.as.server.service.RequestParameterService; |
66 |
| -import io.jans.as.server.service.SessionIdService; |
67 |
| -import io.jans.as.server.service.UserService; |
| 40 | +import io.jans.as.server.service.*; |
68 | 41 | import io.jans.as.server.service.ciba.CibaRequestService;
|
69 | 42 | import io.jans.as.server.service.external.ExternalPostAuthnService;
|
70 | 43 | import io.jans.as.server.service.external.ExternalUpdateTokenService;
|
|
93 | 66 | import org.slf4j.Logger;
|
94 | 67 |
|
95 | 68 | import java.net.URI;
|
96 |
| -import java.util.Arrays; |
97 |
| -import java.util.Date; |
98 |
| -import java.util.HashMap; |
99 |
| -import java.util.List; |
100 |
| -import java.util.Map; |
| 69 | +import java.util.*; |
101 | 70 | import java.util.Map.Entry;
|
102 |
| -import java.util.Set; |
103 | 71 | import java.util.function.Function;
|
104 | 72 |
|
105 | 73 | import static io.jans.as.model.util.StringUtils.implode;
|
106 |
| -import static org.apache.commons.lang3.BooleanUtils.isTrue; |
| 74 | +import static org.apache.commons.lang3.BooleanUtils.*; |
107 | 75 |
|
108 | 76 | /**
|
109 | 77 | * Implementation for request authorization through REST web services.
|
@@ -365,7 +333,7 @@ private ResponseBuilder authorize(AuthzRequest authzRequest) throws AcrChangedEx
|
365 | 333 |
|
366 | 334 | authzRequestService.setDefaultAcrsIfNeeded(authzRequest, client);
|
367 | 335 |
|
368 |
| - checkScopes(responseTypes, prompts, client, scopes); |
| 336 | + checkOfflineAccessScopes(responseTypes, prompts, client, scopes); |
369 | 337 | checkResponseType(authzRequest, responseTypes, client);
|
370 | 338 |
|
371 | 339 | AuthorizationGrant authorizationGrant = null;
|
@@ -688,17 +656,19 @@ private void validateMaxAge(AuthzRequest authzRequest, List<Prompt> prompts, Ses
|
688 | 656 | }
|
689 | 657 | }
|
690 | 658 |
|
691 |
| - private void checkScopes(List<ResponseType> responseTypes, List<Prompt> prompts, Client client, Set<String> scopes) { |
692 |
| - if (scopes.contains(ScopeConstants.OFFLINE_ACCESS) && !client.getTrustedClient()) { |
693 |
| - if (!responseTypes.contains(ResponseType.CODE)) { |
694 |
| - log.trace("Removed (ignored) offline_scope. Can't find `code` in response_type which is required."); |
695 |
| - scopes.remove(ScopeConstants.OFFLINE_ACCESS); |
696 |
| - } |
| 659 | + public void checkOfflineAccessScopes(List<ResponseType> responseTypes, List<Prompt> prompts, Client client, Set<String> scopes) { |
| 660 | + if (!scopes.contains(ScopeConstants.OFFLINE_ACCESS) || client.getTrustedClient()) { |
| 661 | + return; |
| 662 | + } |
697 | 663 |
|
698 |
| - if (scopes.contains(ScopeConstants.OFFLINE_ACCESS) && !prompts.contains(Prompt.CONSENT)) { |
699 |
| - log.error("Removed offline_access. Can't find prompt=consent. Consent is required for offline_access."); |
700 |
| - scopes.remove(ScopeConstants.OFFLINE_ACCESS); |
701 |
| - } |
| 664 | + if (!responseTypes.contains(ResponseType.CODE)) { |
| 665 | + log.trace("Removed (ignored) offline_scope. Can't find `code` in response_type which is required."); |
| 666 | + scopes.remove(ScopeConstants.OFFLINE_ACCESS); |
| 667 | + } |
| 668 | + |
| 669 | + if (scopes.contains(ScopeConstants.OFFLINE_ACCESS) && !prompts.contains(Prompt.CONSENT) && !toBoolean(client.getAttributes().getAllowOfflineAccessWithoutConsent())) { |
| 670 | + log.error("Removed offline_access. Can't find prompt=consent. Consent is required for offline_access."); |
| 671 | + scopes.remove(ScopeConstants.OFFLINE_ACCESS); |
702 | 672 | }
|
703 | 673 | }
|
704 | 674 |
|
|
0 commit comments