keycloak-service
クラス | 公開メンバ関数 | 静的公開メンバ関数 | 静的公開変数類 | 静的関数 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.authorization.authorization.AuthorizationTokenService クラス
org.keycloak.authorization.authorization.AuthorizationTokenService 連携図
Collaboration graph

クラス

class  KeycloakAuthorizationRequest
 

公開メンバ関数

Response authorize (KeycloakAuthorizationRequest request)
 

静的公開メンバ関数

static AuthorizationTokenService instance ()
 

静的公開変数類

static final String CLAIM_TOKEN_FORMAT_ID_TOKEN = "http://openid.net/specs/openid-connect-core-1_0.html#IDToken"
 

静的関数

 [static initializer]
 

非公開メンバ関数

Response createSuccessfulResponse (Object response, KeycloakAuthorizationRequest request)
 
boolean isPublicClientRequestingEntitlementWithClaims (KeycloakAuthorizationRequest request)
 
Collection< Permission > evaluatePermissions (KeycloakAuthorizationRequest request, PermissionTicketToken ticket, ResourceServer resourceServer, KeycloakEvaluationContext evaluationContext, KeycloakIdentity identity)
 
Collection< Permission > evaluateUserManagedPermissions (KeycloakAuthorizationRequest request, PermissionTicketToken ticket, ResourceServer resourceServer, KeycloakEvaluationContext evaluationContext, KeycloakIdentity identity)
 
Collection< Permission > evaluateAllPermissions (KeycloakAuthorizationRequest request, ResourceServer resourceServer, KeycloakEvaluationContext evaluationContext, KeycloakIdentity identity)
 
AuthorizationResponse createAuthorizationResponse (KeycloakIdentity identity, Collection< Permission > entitlements, KeycloakAuthorizationRequest request, ClientModel targetClient)
 
boolean isUpgraded (AuthorizationRequest request, Authorization authorization)
 
PermissionTicketToken getPermissionTicket (KeycloakAuthorizationRequest request)
 
ResourceServer getResourceServer (PermissionTicketToken ticket, KeycloakAuthorizationRequest request)
 
KeycloakEvaluationContext createEvaluationContext (KeycloakAuthorizationRequest request)
 
Collection< ResourcePermission > createPermissions (PermissionTicketToken ticket, KeycloakAuthorizationRequest request, ResourceServer resourceServer, KeycloakIdentity identity, AuthorizationProvider authorization)
 
PermissionTicketToken verifyPermissionTicket (KeycloakAuthorizationRequest request)
 
boolean isGranted (PermissionTicketToken ticket, AuthorizationRequest request, Collection< Permission > permissions)
 

静的非公開変数類

static final Logger logger = Logger.getLogger(AuthorizationTokenService.class)
 
static final String RESPONSE_MODE_DECISION = "decision"
 
static final String RESPONSE_MODE_PERMISSIONS = "permissions"
 
static final String RESPONSE_MODE_DECISION_RESULT = "result"
 
static Map< String, BiFunction< AuthorizationRequest, AuthorizationProvider, KeycloakEvaluationContext > > SUPPORTED_CLAIM_TOKEN_FORMATS
 
static final AuthorizationTokenService INSTANCE = new AuthorizationTokenService()
 

詳解

著者
Pedro Igor

関数詳解

◆ [static initializer]()

org.keycloak.authorization.authorization.AuthorizationTokenService.[static initializer] ( )
inlinestaticpackage

◆ authorize()

Response org.keycloak.authorization.authorization.AuthorizationTokenService.authorize ( KeycloakAuthorizationRequest  request)
inline
138  {
139  if (request == null) {
140  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.INVALID_GRANT, "Invalid authorization request.", Status.BAD_REQUEST);
141  }
142 
143  // it is not secure to allow public clients to push arbitrary claims because message can be tampered
145  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.INVALID_GRANT, "Public clients are not allowed to send claims", Status.FORBIDDEN);
146  }
147 
148  try {
149  PermissionTicketToken ticket = getPermissionTicket(request);
150 
151  request.setClaims(ticket.getClaims());
152 
153  ResourceServer resourceServer = getResourceServer(ticket, request);
154  KeycloakEvaluationContext evaluationContext = createEvaluationContext(request);
155  KeycloakIdentity identity = KeycloakIdentity.class.cast(evaluationContext.getIdentity());
156  Collection<Permission> permissions;
157 
158  if (request.getTicket() != null) {
159  permissions = evaluateUserManagedPermissions(request, ticket, resourceServer, evaluationContext, identity);
160  } else if (ticket.getPermissions().isEmpty() && request.getRpt() == null) {
161  permissions = evaluateAllPermissions(request, resourceServer, evaluationContext, identity);
162  } else {
163  permissions = evaluatePermissions(request, ticket, resourceServer, evaluationContext, identity);
164  }
165 
166  if (isGranted(ticket, request, permissions)) {
167  AuthorizationProvider authorization = request.getAuthorization();
168  ClientModel targetClient = authorization.getRealm().getClientById(resourceServer.getId());
169  Metadata metadata = request.getMetadata();
170  String responseMode = metadata != null ? metadata.getResponseMode() : null;
171 
172  if (responseMode != null) {
173  if (RESPONSE_MODE_DECISION.equals(metadata.getResponseMode())) {
174  Map<String, Object> responseClaims = new HashMap<>();
175 
176  responseClaims.put(RESPONSE_MODE_DECISION_RESULT, true);
177 
178  return createSuccessfulResponse(responseClaims, request);
179  } else if (RESPONSE_MODE_PERMISSIONS.equals(metadata.getResponseMode())) {
180  return createSuccessfulResponse(permissions, request);
181  } else {
182  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.INVALID_REQUEST, "Invalid response_mode", Status.BAD_REQUEST);
183  }
184  } else {
185  return createSuccessfulResponse(createAuthorizationResponse(identity, permissions, request, targetClient), request);
186  }
187  }
188 
189  if (request.isSubmitRequest()) {
190  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.ACCESS_DENIED, "request_submitted", Status.FORBIDDEN);
191  } else {
192  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.ACCESS_DENIED, "not_authorized", Status.FORBIDDEN);
193  }
194  } catch (ErrorResponseException | CorsErrorResponseException cause) {
195  if (logger.isDebugEnabled()) {
196  logger.debug("Error while evaluating permissions", cause);
197  }
198  throw cause;
199  } catch (Exception cause) {
200  logger.error("Unexpected error while evaluating permissions", cause);
201  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.SERVER_ERROR, "Unexpected error while evaluating permissions", Status.INTERNAL_SERVER_ERROR);
202  }
203  }
static final String RESPONSE_MODE_DECISION
Definition: AuthorizationTokenService.java:92
PermissionTicketToken getPermissionTicket(KeycloakAuthorizationRequest request)
Definition: AuthorizationTokenService.java:302
Collection< Permission > evaluateUserManagedPermissions(KeycloakAuthorizationRequest request, PermissionTicketToken ticket, ResourceServer resourceServer, KeycloakEvaluationContext evaluationContext, KeycloakIdentity identity)
Definition: AuthorizationTokenService.java:223
AuthorizationResponse createAuthorizationResponse(KeycloakIdentity identity, Collection< Permission > entitlements, KeycloakAuthorizationRequest request, ClientModel targetClient)
Definition: AuthorizationTokenService.java:237
static final Logger logger
Definition: AuthorizationTokenService.java:91
static final String RESPONSE_MODE_DECISION_RESULT
Definition: AuthorizationTokenService.java:94
KeycloakEvaluationContext createEvaluationContext(KeycloakAuthorizationRequest request)
Definition: AuthorizationTokenService.java:343
Response createSuccessfulResponse(Object response, KeycloakAuthorizationRequest request)
Definition: AuthorizationTokenService.java:205
boolean isPublicClientRequestingEntitlementWithClaims(KeycloakAuthorizationRequest request)
Definition: AuthorizationTokenService.java:212
static final String RESPONSE_MODE_PERMISSIONS
Definition: AuthorizationTokenService.java:93
boolean isGranted(PermissionTicketToken ticket, AuthorizationRequest request, Collection< Permission > permissions)
Definition: AuthorizationTokenService.java:551
Collection< Permission > evaluateAllPermissions(KeycloakAuthorizationRequest request, ResourceServer resourceServer, KeycloakEvaluationContext evaluationContext, KeycloakIdentity identity)
Definition: AuthorizationTokenService.java:230
Collection< Permission > evaluatePermissions(KeycloakAuthorizationRequest request, PermissionTicketToken ticket, ResourceServer resourceServer, KeycloakEvaluationContext evaluationContext, KeycloakIdentity identity)
Definition: AuthorizationTokenService.java:216
ResourceServer getResourceServer(PermissionTicketToken ticket, KeycloakAuthorizationRequest request)
Definition: AuthorizationTokenService.java:318

◆ createAuthorizationResponse()

AuthorizationResponse org.keycloak.authorization.authorization.AuthorizationTokenService.createAuthorizationResponse ( KeycloakIdentity  identity,
Collection< Permission >  entitlements,
KeycloakAuthorizationRequest  request,
ClientModel  targetClient 
)
inlineprivate
237  {
238  KeycloakSession keycloakSession = request.getKeycloakSession();
239  AccessToken accessToken = identity.getAccessToken();
240  RealmModel realm = request.getRealm();
241  UserSessionProvider sessions = keycloakSession.sessions();
242  UserSessionModel userSessionModel = sessions.getUserSession(realm, accessToken.getSessionState());
243 
244  if (userSessionModel == null) {
245  userSessionModel = sessions.getOfflineUserSession(realm, accessToken.getSessionState());
246  }
247 
248  ClientModel client = realm.getClientByClientId(accessToken.getIssuedFor());
249  AuthenticatedClientSessionModel clientSession = userSessionModel.getAuthenticatedClientSessionByClient(client.getId());
250  ClientSessionContext clientSessionCtx = DefaultClientSessionContext.fromClientSessionScopeParameter(clientSession);
251  TokenManager tokenManager = request.getTokenManager();
252  EventBuilder event = request.getEvent();
253  AccessTokenResponseBuilder responseBuilder = tokenManager.responseBuilder(realm, clientSession.getClient(), event, keycloakSession, userSessionModel, clientSessionCtx)
254  .generateAccessToken()
255  .generateRefreshToken();
256  AccessToken rpt = responseBuilder.getAccessToken();
257 
258  rpt.issuedFor(client.getClientId());
259 
260  Authorization authorization = new Authorization();
261 
262  authorization.setPermissions(entitlements);
263 
264  rpt.setAuthorization(authorization);
265 
266  RefreshToken refreshToken = responseBuilder.getRefreshToken();
267 
268  refreshToken.issuedFor(client.getClientId());
269  refreshToken.setAuthorization(authorization);
270 
271  if (!rpt.hasAudience(targetClient.getClientId())) {
272  rpt.audience(targetClient.getClientId());
273  }
274 
275  return new AuthorizationResponse(responseBuilder.build(), isUpgraded(request, authorization));
276  }
boolean isUpgraded(AuthorizationRequest request, Authorization authorization)
Definition: AuthorizationTokenService.java:278

◆ createEvaluationContext()

KeycloakEvaluationContext org.keycloak.authorization.authorization.AuthorizationTokenService.createEvaluationContext ( KeycloakAuthorizationRequest  request)
inlineprivate
343  {
344  String claimTokenFormat = request.getClaimTokenFormat();
345 
346  if (claimTokenFormat == null) {
347  claimTokenFormat = CLAIM_TOKEN_FORMAT_ID_TOKEN;
348  }
349 
350  BiFunction<AuthorizationRequest, AuthorizationProvider, KeycloakEvaluationContext> evaluationContextProvider = SUPPORTED_CLAIM_TOKEN_FORMATS.get(claimTokenFormat);
351 
352  if (evaluationContextProvider == null) {
353  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.INVALID_REQUEST, "Claim token format [" + claimTokenFormat + "] not supported", Status.BAD_REQUEST);
354  }
355 
356  return evaluationContextProvider.apply(request, request.getAuthorization());
357  }
static Map< String, BiFunction< AuthorizationRequest, AuthorizationProvider, KeycloakEvaluationContext > > SUPPORTED_CLAIM_TOKEN_FORMATS
Definition: AuthorizationTokenService.java:95
static final String CLAIM_TOKEN_FORMAT_ID_TOKEN
Definition: AuthorizationTokenService.java:89

◆ createPermissions()

Collection<ResourcePermission> org.keycloak.authorization.authorization.AuthorizationTokenService.createPermissions ( PermissionTicketToken  ticket,
KeycloakAuthorizationRequest  request,
ResourceServer  resourceServer,
KeycloakIdentity  identity,
AuthorizationProvider  authorization 
)
inlineprivate
359  {
360  StoreFactory storeFactory = authorization.getStoreFactory();
361  Map<String, ResourcePermission> permissionsToEvaluate = new LinkedHashMap<>();
362  ResourceStore resourceStore = storeFactory.getResourceStore();
363  ScopeStore scopeStore = storeFactory.getScopeStore();
364  Metadata metadata = request.getMetadata();
365  final AtomicInteger limit = metadata != null && metadata.getLimit() != null ? new AtomicInteger(metadata.getLimit()) : null;
366 
367  for (Permission permission : ticket.getPermissions()) {
368  if (limit != null && limit.get() <= 0) {
369  break;
370  }
371 
372  Set<String> requestedScopes = permission.getScopes();
373 
374  if (permission.getScopes() == null) {
375  requestedScopes = new HashSet<>();
376  }
377 
378  List<Resource> requestedResources = new ArrayList<>();
379  String resourceId = permission.getResourceId();
380 
381  if (resourceId != null) {
382  Resource resource = null;
383 
384  if (resourceId.indexOf('-') != -1) {
385  resource = resourceStore.findById(resourceId, resourceServer.getId());
386  }
387 
388  if (resource != null) {
389  requestedResources.add(resource);
390  } else {
391  String resourceName = resourceId;
392  Resource ownerResource = resourceStore.findByName(resourceName, identity.getId(), resourceServer.getId());
393 
394  if (ownerResource != null) {
395  permission.setResourceId(ownerResource.getId());
396  requestedResources.add(ownerResource);
397  }
398 
399  if (!identity.isResourceServer()) {
400  Resource serverResource = resourceStore.findByName(resourceName, resourceServer.getId());
401 
402  if (serverResource != null) {
403  permission.setResourceId(serverResource.getId());
404  requestedResources.add(serverResource);
405  }
406  }
407  }
408  }
409 
410  String clientAdditionalScopes = request.getScope();
411 
412  if (clientAdditionalScopes != null) {
413  requestedScopes.addAll(Arrays.asList(clientAdditionalScopes.split(" ")));
414  }
415 
416  Set<Scope> requestedScopesModel = requestedScopes.stream().map(s -> scopeStore.findByName(s, resourceServer.getId())).filter(Objects::nonNull).collect(Collectors.toSet());
417 
418  if (resourceId != null && requestedResources.isEmpty()) {
419  throw new CorsErrorResponseException(request.getCors(), "invalid_resource", "Resource with id [" + resourceId + "] does not exist.", Status.BAD_REQUEST);
420  }
421 
422  if (!requestedScopes.isEmpty() && requestedScopesModel.isEmpty()) {
423  throw new CorsErrorResponseException(request.getCors(), "invalid_scope", "One of the given scopes " + permission.getScopes() + " is invalid", Status.BAD_REQUEST);
424  }
425 
426  if (!requestedResources.isEmpty()) {
427  for (Resource resource : requestedResources) {
428  if (limit != null && limit.get() <= 0) {
429  break;
430  }
431  ResourcePermission perm = permissionsToEvaluate.get(resource.getId());
432 
433  if (perm == null) {
434  perm = Permissions.createResourcePermissions(resource, requestedScopesModel, authorization, request);
435  permissionsToEvaluate.put(resource.getId(), perm);
436  if (limit != null) {
437  limit.decrementAndGet();
438  }
439  } else {
440  for (Scope scope : requestedScopesModel) {
441  perm.addScope(scope);
442  }
443  }
444  }
445  } else {
446  AtomicBoolean processed = new AtomicBoolean();
447 
448  resourceStore.findByScope(requestedScopesModel.stream().map(Scope::getId).collect(Collectors.toList()), resourceServer.getId(), resource -> {
449  if (limit != null && limit.get() <= 0) {
450  return;
451  }
452 
453  ResourcePermission perm = permissionsToEvaluate.get(resource.getId());
454 
455  if (perm == null) {
456  perm = Permissions.createResourcePermissions(resource, requestedScopesModel, authorization, request);
457  permissionsToEvaluate.put(resource.getId(), perm);
458  if (limit != null) {
459  limit.decrementAndGet();
460  }
461  } else {
462  for (Scope scope : requestedScopesModel) {
463  perm.addScope(scope);
464  }
465  }
466 
467  processed.compareAndSet(false, true);
468  });
469 
470  if (!processed.get()) {
471  for (Scope scope : requestedScopesModel) {
472  if (limit != null && limit.getAndDecrement() <= 0) {
473  break;
474  }
475  permissionsToEvaluate.computeIfAbsent(scope.getId(), s -> new ResourcePermission(null, new ArrayList<>(Arrays.asList(scope)), resourceServer, request.getClaims()));
476  }
477  }
478  }
479  }
480 
481  AccessToken rpt = request.getRpt();
482 
483  if (rpt != null && rpt.isActive()) {
484  AccessToken.Authorization authorizationData = rpt.getAuthorization();
485 
486  if (authorizationData != null) {
487  Collection<Permission> permissions = authorizationData.getPermissions();
488 
489  if (permissions != null) {
490  for (Permission grantedPermission : permissions) {
491  if (limit != null && limit.get() <= 0) {
492  break;
493  }
494 
495  Resource resource = resourceStore.findById(grantedPermission.getResourceId(), ticket.getAudience()[0]);
496 
497  if (resource != null) {
498  ResourcePermission permission = permissionsToEvaluate.get(resource.getId());
499 
500  if (permission == null) {
501  permission = new ResourcePermission(resource, new ArrayList<>(), resourceServer, grantedPermission.getClaims());
502  permissionsToEvaluate.put(resource.getId(), permission);
503  if (limit != null) {
504  limit.decrementAndGet();
505  }
506  } else {
507  if (grantedPermission.getClaims() != null) {
508  for (Entry<String, Set<String>> entry : grantedPermission.getClaims().entrySet()) {
509  Set<String> claims = permission.getClaims().get(entry.getKey());
510 
511  if (claims != null) {
512  claims.addAll(entry.getValue());
513  }
514  }
515  }
516  }
517 
518  for (String scopeName : grantedPermission.getScopes()) {
519  Scope scope = scopeStore.findByName(scopeName, resourceServer.getId());
520 
521  if (scope != null) {
522  if (!permission.getScopes().contains(scope)) {
523  permission.getScopes().add(scope);
524  }
525  }
526  }
527  }
528  }
529  }
530  }
531  }
532 
533  return permissionsToEvaluate.values();
534  }

◆ createSuccessfulResponse()

Response org.keycloak.authorization.authorization.AuthorizationTokenService.createSuccessfulResponse ( Object  response,
KeycloakAuthorizationRequest  request 
)
inlineprivate
205  {
206  return Cors.add(request.getHttpRequest(), Response.status(Status.OK).type(MediaType.APPLICATION_JSON_TYPE).entity(response))
207  .allowedOrigins(request.getKeycloakSession().getContext().getUri(), request.getKeycloakSession().getContext().getClient())
208  .allowedMethods(HttpMethod.POST)
209  .exposedHeaders(Cors.ACCESS_CONTROL_ALLOW_METHODS).build();
210  }

◆ evaluateAllPermissions()

Collection<Permission> org.keycloak.authorization.authorization.AuthorizationTokenService.evaluateAllPermissions ( KeycloakAuthorizationRequest  request,
ResourceServer  resourceServer,
KeycloakEvaluationContext  evaluationContext,
KeycloakIdentity  identity 
)
inlineprivate
230  {
231  AuthorizationProvider authorization = request.getAuthorization();
232  return authorization.evaluators()
233  .from(Permissions.all(resourceServer, identity, authorization, request), evaluationContext)
234  .evaluate(resourceServer, request);
235  }

◆ evaluatePermissions()

Collection<Permission> org.keycloak.authorization.authorization.AuthorizationTokenService.evaluatePermissions ( KeycloakAuthorizationRequest  request,
PermissionTicketToken  ticket,
ResourceServer  resourceServer,
KeycloakEvaluationContext  evaluationContext,
KeycloakIdentity  identity 
)
inlineprivate
216  {
217  AuthorizationProvider authorization = request.getAuthorization();
218  return authorization.evaluators()
219  .from(createPermissions(ticket, request, resourceServer, identity, authorization), evaluationContext)
220  .evaluate(resourceServer, request);
221  }
Collection< ResourcePermission > createPermissions(PermissionTicketToken ticket, KeycloakAuthorizationRequest request, ResourceServer resourceServer, KeycloakIdentity identity, AuthorizationProvider authorization)
Definition: AuthorizationTokenService.java:359

◆ evaluateUserManagedPermissions()

Collection<Permission> org.keycloak.authorization.authorization.AuthorizationTokenService.evaluateUserManagedPermissions ( KeycloakAuthorizationRequest  request,
PermissionTicketToken  ticket,
ResourceServer  resourceServer,
KeycloakEvaluationContext  evaluationContext,
KeycloakIdentity  identity 
)
inlineprivate
223  {
224  AuthorizationProvider authorization = request.getAuthorization();
225  return authorization.evaluators()
226  .from(createPermissions(ticket, request, resourceServer, identity, authorization), evaluationContext)
227  .evaluate(new PermissionTicketAwareDecisionResultCollector(request, ticket, identity, resourceServer, authorization)).results();
228  }
Collection< ResourcePermission > createPermissions(PermissionTicketToken ticket, KeycloakAuthorizationRequest request, ResourceServer resourceServer, KeycloakIdentity identity, AuthorizationProvider authorization)
Definition: AuthorizationTokenService.java:359

◆ getPermissionTicket()

PermissionTicketToken org.keycloak.authorization.authorization.AuthorizationTokenService.getPermissionTicket ( KeycloakAuthorizationRequest  request)
inlineprivate
302  {
303  // if there is a ticket is because it is a UMA flow and the ticket was sent by the client after obtaining it from the target resource server
304  if (request.getTicket() != null) {
305  return verifyPermissionTicket(request);
306  }
307 
308  // if there is no ticket, we use the permissions the client is asking for.
309  // This is a Keycloak extension to UMA flow where clients are capable of obtaining a RPT without a ticket
310  PermissionTicketToken permissions = request.getPermissions();
311 
312  // an audience must be set by the client when doing this method of obtaining RPT, that is how we know the target resource server
313  permissions.audience(request.getAudience());
314 
315  return permissions;
316  }
PermissionTicketToken verifyPermissionTicket(KeycloakAuthorizationRequest request)
Definition: AuthorizationTokenService.java:536

◆ getResourceServer()

ResourceServer org.keycloak.authorization.authorization.AuthorizationTokenService.getResourceServer ( PermissionTicketToken  ticket,
KeycloakAuthorizationRequest  request 
)
inlineprivate
318  {
319  AuthorizationProvider authorization = request.getAuthorization();
320  StoreFactory storeFactory = authorization.getStoreFactory();
321  ResourceServerStore resourceServerStore = storeFactory.getResourceServerStore();
322  String[] audience = ticket.getAudience();
323 
324  if (audience == null || audience.length == 0) {
325  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.INVALID_REQUEST, "You must provide the audience", Status.BAD_REQUEST);
326  }
327 
328  ClientModel clientModel = request.getRealm().getClientByClientId(audience[0]);
329 
330  if (clientModel == null) {
331  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.INVALID_REQUEST, "Unknown resource server id.", Status.BAD_REQUEST);
332  }
333 
334  ResourceServer resourceServer = resourceServerStore.findById(clientModel.getId());
335 
336  if (resourceServer == null) {
337  throw new CorsErrorResponseException(request.getCors(), OAuthErrorException.INVALID_REQUEST, "Client does not support permissions", Status.BAD_REQUEST);
338  }
339 
340  return resourceServer;
341  }

◆ instance()

static AuthorizationTokenService org.keycloak.authorization.authorization.AuthorizationTokenService.instance ( )
inlinestatic
134  {
135  return INSTANCE;
136  }
static final AuthorizationTokenService INSTANCE
Definition: AuthorizationTokenService.java:132

◆ isGranted()

boolean org.keycloak.authorization.authorization.AuthorizationTokenService.isGranted ( PermissionTicketToken  ticket,
AuthorizationRequest  request,
Collection< Permission >  permissions 
)
inlineprivate
551  {
552  List<Permission> requestedPermissions = ticket.getPermissions();
553 
554  // denies in case a rpt was provided along with the authorization request but any requested permission was not granted
555  if (request.getRpt() != null && !requestedPermissions.isEmpty() && requestedPermissions.stream().anyMatch(permission -> !permissions.contains(permission))) {
556  return false;
557  }
558 
559  return !permissions.isEmpty();
560  }

◆ isPublicClientRequestingEntitlementWithClaims()

boolean org.keycloak.authorization.authorization.AuthorizationTokenService.isPublicClientRequestingEntitlementWithClaims ( KeycloakAuthorizationRequest  request)
inlineprivate
212  {
213  return request.getClaimToken() != null && request.getKeycloakSession().getContext().getClient().isPublicClient() && request.getTicket() == null;
214  }

◆ isUpgraded()

boolean org.keycloak.authorization.authorization.AuthorizationTokenService.isUpgraded ( AuthorizationRequest  request,
Authorization  authorization 
)
inlineprivate
278  {
279  AccessToken previousRpt = request.getRpt();
280 
281  if (previousRpt == null) {
282  return false;
283  }
284 
285  Authorization previousAuthorization = previousRpt.getAuthorization();
286 
287  if (previousAuthorization != null) {
288  Collection<Permission> previousPermissions = previousAuthorization.getPermissions();
289 
290  if (previousPermissions != null) {
291  for (Permission previousPermission : previousPermissions) {
292  if (!authorization.getPermissions().contains(previousPermission)) {
293  return false;
294  }
295  }
296  }
297  }
298 
299  return true;
300  }

◆ verifyPermissionTicket()

PermissionTicketToken org.keycloak.authorization.authorization.AuthorizationTokenService.verifyPermissionTicket ( KeycloakAuthorizationRequest  request)
inlineprivate
536  {
537  String ticketString = request.getTicket();
538 
539  PermissionTicketToken ticket = request.getKeycloakSession().tokens().decode(ticketString, PermissionTicketToken.class);
540  if (ticket == null) {
541  throw new CorsErrorResponseException(request.getCors(), "invalid_ticket", "Ticket verification failed", Status.FORBIDDEN);
542  }
543 
544  if (!ticket.isActive()) {
545  throw new CorsErrorResponseException(request.getCors(), "invalid_ticket", "Invalid permission ticket.", Status.FORBIDDEN);
546  }
547 
548  return ticket;
549  }

メンバ詳解

◆ CLAIM_TOKEN_FORMAT_ID_TOKEN

final String org.keycloak.authorization.authorization.AuthorizationTokenService.CLAIM_TOKEN_FORMAT_ID_TOKEN = "http://openid.net/specs/openid-connect-core-1_0.html#IDToken"
static

◆ INSTANCE

final AuthorizationTokenService org.keycloak.authorization.authorization.AuthorizationTokenService.INSTANCE = new AuthorizationTokenService()
staticprivate

◆ logger

final Logger org.keycloak.authorization.authorization.AuthorizationTokenService.logger = Logger.getLogger(AuthorizationTokenService.class)
staticprivate

◆ RESPONSE_MODE_DECISION

final String org.keycloak.authorization.authorization.AuthorizationTokenService.RESPONSE_MODE_DECISION = "decision"
staticprivate

◆ RESPONSE_MODE_DECISION_RESULT

final String org.keycloak.authorization.authorization.AuthorizationTokenService.RESPONSE_MODE_DECISION_RESULT = "result"
staticprivate

◆ RESPONSE_MODE_PERMISSIONS

final String org.keycloak.authorization.authorization.AuthorizationTokenService.RESPONSE_MODE_PERMISSIONS = "permissions"
staticprivate

◆ SUPPORTED_CLAIM_TOKEN_FORMATS

Map<String, BiFunction<AuthorizationRequest, AuthorizationProvider, KeycloakEvaluationContext> > org.keycloak.authorization.authorization.AuthorizationTokenService.SUPPORTED_CLAIM_TOKEN_FORMATS
staticprivate

このクラス詳解は次のファイルから抽出されました: