keycloak
公開メンバ関数 | 関数 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.keycloak.authorization.AuthorizationProvider クラス
org.keycloak.authorization.AuthorizationProvider の継承関係図
Inheritance graph
org.keycloak.authorization.AuthorizationProvider 連携図
Collaboration graph

公開メンバ関数

 AuthorizationProvider (KeycloakSession session, RealmModel realm, Map< String, PolicyProviderFactory > policyProviderFactories, PolicyEvaluator policyEvaluator)
 
Evaluators evaluators ()
 
StoreFactory getStoreFactory ()
 
StoreFactory getLocalStoreFactory ()
 
Collection< PolicyProviderFactorygetProviderFactories ()
 
KeycloakSession getKeycloakSession ()
 
RealmModel getRealm ()
 
PolicyEvaluator getPolicyEvaluator ()
 
void close ()
 

関数

public< F extends PolicyProviderFactory > F getProviderFactory (String type)
 
public< P extends PolicyProvider > P getProvider (String type)
 

非公開メンバ関数

StoreFactory createStoreFactory (StoreFactory storeFactory)
 
ScopeStore createScopeWrapper (StoreFactory storeFactory)
 
PolicyStore createPolicyWrapper (StoreFactory storeFactory)
 
ResourceStore createResourceStoreWrapper (StoreFactory storeFactory)
 

非公開変数類

final PolicyEvaluator policyEvaluator
 
StoreFactory storeFactory
 
StoreFactory storeFactoryDelegate
 
final Map< String, PolicyProviderFactorypolicyProviderFactories
 
final KeycloakSession keycloakSession
 
final RealmModel realm
 

詳解

The main contract here is the creation of org.keycloak.authorization.permission.evaluator.PermissionEvaluator instances. Usually an application has a single AuthorizationProvider instance and threads servicing client requests obtain org.keycloak.authorization.permission.evaluator.PermissionEvaluator from the evaluators() method.

The internal state of a AuthorizationProvider is immutable. This internal state includes all of the metadata used during the evaluation of policies.

Once created, org.keycloak.authorization.permission.evaluator.PermissionEvaluator instances can be obtained from the evaluators() method:

    List<ResourcePermission> permissionsToEvaluate = getPermissions(); // the permissions to evaluate
    EvaluationContext evaluationContext = createEvaluationContext(); // the context with runtime environment information
    PermissionEvaluator evaluator = authorization.evaluators().from(permissionsToEvaluate, context);
    evaluator.evaluate(new Decision() {
        public void onDecision(Evaluation evaluation) {
             // do something on grant
        }
    });
著者
Pedro Igor

構築子と解体子

◆ AuthorizationProvider()

org.keycloak.authorization.AuthorizationProvider.AuthorizationProvider ( KeycloakSession  session,
RealmModel  realm,
Map< String, PolicyProviderFactory policyProviderFactories,
PolicyEvaluator  policyEvaluator 
)
inline
85  {
86  this.keycloakSession = session;
87  this.realm = realm;
90  }
final PolicyEvaluator policyEvaluator
Definition: AuthorizationProvider.java:78
final RealmModel realm
Definition: AuthorizationProvider.java:83
final KeycloakSession keycloakSession
Definition: AuthorizationProvider.java:82
final Map< String, PolicyProviderFactory > policyProviderFactories
Definition: AuthorizationProvider.java:81

関数詳解

◆ close()

void org.keycloak.authorization.AuthorizationProvider.close ( )
inline

org.keycloak.provider.Providerを実装しています。

178  {
179 
180  }

◆ createPolicyWrapper()

PolicyStore org.keycloak.authorization.AuthorizationProvider.createPolicyWrapper ( StoreFactory  storeFactory)
inlineprivate
280  {
281  return new PolicyStore() {
282 
283  PolicyStore policyStore = storeFactory.getPolicyStore();
284 
285  @Override
286  public Policy create(AbstractPolicyRepresentation representation, ResourceServer resourceServer) {
287  Set<String> resources = representation.getResources();
288 
289  if (resources != null) {
290  representation.setResources(resources.stream().map(id -> {
291  Resource resource = storeFactory.getResourceStore().findById(id, resourceServer.getId());
292 
293  if (resource == null) {
294  resource = storeFactory.getResourceStore().findByName(id, resourceServer.getId());
295  }
296 
297  if (resource == null) {
298  throw new RuntimeException("Resource [" + id + "] does not exist or is not owned by the resource server.");
299  }
300 
301  return resource.getId();
302  }).collect(Collectors.toSet()));
303  }
304 
305  Set<String> scopes = representation.getScopes();
306 
307  if (scopes != null) {
308  representation.setScopes(scopes.stream().map(id -> {
309  Scope scope = storeFactory.getScopeStore().findById(id, resourceServer.getId());
310 
311  if (scope == null) {
312  scope = storeFactory.getScopeStore().findByName(id, resourceServer.getId());
313  }
314 
315  if (scope == null) {
316  throw new RuntimeException("Scope [" + id + "] does not exist");
317  }
318 
319  return scope.getId();
320  }).collect(Collectors.toSet()));
321  }
322 
323 
324  Set<String> policies = representation.getPolicies();
325 
326  if (policies != null) {
327  representation.setPolicies(policies.stream().map(id -> {
328  Policy policy = storeFactory.getPolicyStore().findById(id, resourceServer.getId());
329 
330  if (policy == null) {
331  policy = storeFactory.getPolicyStore().findByName(id, resourceServer.getId());
332  }
333 
334  if (policy == null) {
335  throw new RuntimeException("Policy [" + id + "] does not exist");
336  }
337 
338  return policy.getId();
339  }).collect(Collectors.toSet()));
340  }
341 
342  return RepresentationToModel.toModel(representation, AuthorizationProvider.this, policyStore.create(representation, resourceServer));
343  }
344 
345  @Override
346  public void delete(String id) {
347  Policy policy = findById(id, null);
348 
349  if (policy != null) {
350  ResourceServer resourceServer = policy.getResourceServer();
351 
352  findDependentPolicies(policy.getId(), resourceServer.getId()).forEach(dependentPolicy -> {
353  dependentPolicy.removeAssociatedPolicy(policy);
354  if (dependentPolicy.getAssociatedPolicies().isEmpty()) {
355  delete(dependentPolicy.getId());
356  }
357  });
358 
359  policyStore.delete(id);
360  }
361  }
362 
363  @Override
364  public Policy findById(String id, String resourceServerId) {
365  return policyStore.findById(id, resourceServerId);
366  }
367 
368  @Override
369  public Policy findByName(String name, String resourceServerId) {
370  return policyStore.findByName(name, resourceServerId);
371  }
372 
373  @Override
374  public List<Policy> findByResourceServer(String resourceServerId) {
375  return policyStore.findByResourceServer(resourceServerId);
376  }
377 
378  @Override
379  public List<Policy> findByResourceServer(Map<String, String[]> attributes, String resourceServerId, int firstResult, int maxResult) {
380  return policyStore.findByResourceServer(attributes, resourceServerId, firstResult, maxResult);
381  }
382 
383  @Override
384  public List<Policy> findByResource(String resourceId, String resourceServerId) {
385  return policyStore.findByResource(resourceId, resourceServerId);
386  }
387 
388  @Override
389  public void findByResource(String resourceId, String resourceServerId, Consumer<Policy> consumer) {
390  policyStore.findByResource(resourceId, resourceServerId, consumer);
391  }
392 
393  @Override
394  public List<Policy> findByResourceType(String resourceType, String resourceServerId) {
395  return policyStore.findByResourceType(resourceType, resourceServerId);
396  }
397 
398  @Override
399  public List<Policy> findByScopeIds(List<String> scopeIds, String resourceServerId) {
400  return policyStore.findByScopeIds(scopeIds, resourceServerId);
401  }
402 
403  @Override
404  public List<Policy> findByScopeIds(List<String> scopeIds, String resourceId, String resourceServerId) {
405  return policyStore.findByScopeIds(scopeIds, resourceId, resourceServerId);
406  }
407 
408  @Override
409  public void findByScopeIds(List<String> scopeIds, String resourceId, String resourceServerId, Consumer<Policy> consumer) {
410  policyStore.findByScopeIds(scopeIds, resourceId, resourceServerId, consumer);
411  }
412 
413  @Override
414  public List<Policy> findByType(String type, String resourceServerId) {
415  return policyStore.findByType(type, resourceServerId);
416  }
417 
418  @Override
419  public List<Policy> findDependentPolicies(String id, String resourceServerId) {
420  return policyStore.findDependentPolicies(id, resourceServerId);
421  }
422 
423  @Override
424  public void findByResourceType(String type, String id, Consumer<Policy> policyConsumer) {
425  policyStore.findByResourceType(type, id, policyConsumer);
426  }
427  };
428  }
Policy findByName(String name, String resourceServerId)
Scope findByName(String name, String resourceServerId)
Resource findByName(String name, String resourceServerId)
Resource findById(String id, String resourceServerId)
Scope findById(String id, String resourceServerId)
Policy findById(String id, String resourceServerId)
AuthorizationProvider(KeycloakSession session, RealmModel realm, Map< String, PolicyProviderFactory > policyProviderFactories, PolicyEvaluator policyEvaluator)
Definition: AuthorizationProvider.java:85
StoreFactory storeFactory
Definition: AuthorizationProvider.java:79

◆ createResourceStoreWrapper()

ResourceStore org.keycloak.authorization.AuthorizationProvider.createResourceStoreWrapper ( StoreFactory  storeFactory)
inlineprivate
430  {
431  return new ResourceStore() {
432  ResourceStore delegate = storeFactory.getResourceStore();
433 
434  @Override
435  public Resource create(String name, ResourceServer resourceServer, String owner) {
436  return delegate.create(name, resourceServer, owner);
437  }
438 
439  @Override
440  public Resource create(String id, String name, ResourceServer resourceServer, String owner) {
441  return delegate.create(id, name, resourceServer, owner);
442  }
443 
444  @Override
445  public void delete(String id) {
446  Resource resource = findById(id, null);
447  StoreFactory storeFactory = AuthorizationProvider.this.getStoreFactory();
448  PermissionTicketStore ticketStore = storeFactory.getPermissionTicketStore();
449  List<PermissionTicket> permissions = ticketStore.findByResource(id, resource.getResourceServer().getId());
450 
451  for (PermissionTicket permission : permissions) {
452  ticketStore.delete(permission.getId());
453  }
454 
455  PolicyStore policyStore = storeFactory.getPolicyStore();
456  List<Policy> policies = policyStore.findByResource(id, resource.getResourceServer().getId());
457 
458  for (Policy policyModel : policies) {
459  if (policyModel.getResources().size() == 1) {
460  policyStore.delete(policyModel.getId());
461  } else {
462  policyModel.removeResource(resource);
463  }
464  }
465 
466  delegate.delete(id);
467  }
468 
469  @Override
470  public Resource findById(String id, String resourceServerId) {
471  return delegate.findById(id, resourceServerId);
472  }
473 
474  @Override
475  public List<Resource> findByOwner(String ownerId, String resourceServerId) {
476  return delegate.findByOwner(ownerId, resourceServerId);
477  }
478 
479  @Override
480  public void findByOwner(String ownerId, String resourceServerId, Consumer<Resource> consumer) {
481  delegate.findByOwner(ownerId, resourceServerId, consumer);
482  }
483 
484  @Override
485  public List<Resource> findByUri(String uri, String resourceServerId) {
486  return delegate.findByUri(uri, resourceServerId);
487  }
488 
489  @Override
490  public List<Resource> findByResourceServer(String resourceServerId) {
491  return delegate.findByResourceServer(resourceServerId);
492  }
493 
494  @Override
495  public List<Resource> findByResourceServer(Map<String, String[]> attributes, String resourceServerId, int firstResult, int maxResult) {
496  return delegate.findByResourceServer(attributes, resourceServerId, firstResult, maxResult);
497  }
498 
499  @Override
500  public List<Resource> findByScope(List<String> id, String resourceServerId) {
501  return delegate.findByScope(id, resourceServerId);
502  }
503 
504  @Override
505  public void findByScope(List<String> scopes, String resourceServerId, Consumer<Resource> consumer) {
506  delegate.findByScope(scopes, resourceServerId, consumer);
507  }
508 
509  @Override
510  public Resource findByName(String name, String resourceServerId) {
511  return delegate.findByName(name, resourceServerId);
512  }
513 
514  @Override
515  public Resource findByName(String name, String ownerId, String resourceServerId) {
516  return delegate.findByName(name, ownerId, resourceServerId);
517  }
518 
519  @Override
520  public List<Resource> findByType(String type, String resourceServerId) {
521  return delegate.findByType(type, resourceServerId);
522  }
523 
524  @Override
525  public void findByType(String type, String resourceServerId, Consumer<Resource> consumer) {
526  delegate.findByType(type, resourceServerId, consumer);
527  }
528  };
529  }
Resource create(String name, ResourceServer resourceServer, String owner)
AuthorizationProvider(KeycloakSession session, RealmModel realm, Map< String, PolicyProviderFactory > policyProviderFactories, PolicyEvaluator policyEvaluator)
Definition: AuthorizationProvider.java:85
StoreFactory storeFactory
Definition: AuthorizationProvider.java:79

◆ createScopeWrapper()

ScopeStore org.keycloak.authorization.AuthorizationProvider.createScopeWrapper ( StoreFactory  storeFactory)
inlineprivate
230  {
231  return new ScopeStore() {
232 
233  ScopeStore delegate = storeFactory.getScopeStore();
234 
235  @Override
236  public Scope create(String name, ResourceServer resourceServer) {
237  return delegate.create(name, resourceServer);
238  }
239 
240  @Override
241  public Scope create(String id, String name, ResourceServer resourceServer) {
242  return delegate.create(id, name, resourceServer);
243  }
244 
245  @Override
246  public void delete(String id) {
247  Scope scope = findById(id, null);
248  PermissionTicketStore ticketStore = AuthorizationProvider.this.getStoreFactory().getPermissionTicketStore();
249  List<PermissionTicket> permissions = ticketStore.findByScope(id, scope.getResourceServer().getId());
250 
251  for (PermissionTicket permission : permissions) {
252  ticketStore.delete(permission.getId());
253  }
254 
255  delegate.delete(id);
256  }
257 
258  @Override
259  public Scope findById(String id, String resourceServerId) {
260  return delegate.findById(id, resourceServerId);
261  }
262 
263  @Override
264  public Scope findByName(String name, String resourceServerId) {
265  return delegate.findByName(name, resourceServerId);
266  }
267 
268  @Override
269  public List<Scope> findByResourceServer(String id) {
270  return delegate.findByResourceServer(id);
271  }
272 
273  @Override
274  public List<Scope> findByResourceServer(Map<String, String[]> attributes, String resourceServerId, int firstResult, int maxResult) {
275  return delegate.findByResourceServer(attributes, resourceServerId, firstResult, maxResult);
276  }
277  };
278  }
Scope create(String name, ResourceServer resourceServer)
AuthorizationProvider(KeycloakSession session, RealmModel realm, Map< String, PolicyProviderFactory > policyProviderFactories, PolicyEvaluator policyEvaluator)
Definition: AuthorizationProvider.java:85
StoreFactory storeFactory
Definition: AuthorizationProvider.java:79

◆ createStoreFactory()

StoreFactory org.keycloak.authorization.AuthorizationProvider.createStoreFactory ( StoreFactory  storeFactory)
inlineprivate
182  {
183  return new StoreFactory() {
184 
185  ResourceStore resourceStore;
186  ScopeStore scopeStore;
187  PolicyStore policyStore;
188 
189  @Override
190  public ResourceStore getResourceStore() {
191  if (resourceStore == null) {
192  resourceStore = createResourceStoreWrapper(storeFactory);
193  }
194  return resourceStore;
195  }
196 
197  @Override
198  public ResourceServerStore getResourceServerStore() {
200  }
201 
202  @Override
203  public ScopeStore getScopeStore() {
204  if (scopeStore == null) {
205  scopeStore = createScopeWrapper(storeFactory);
206  }
207  return scopeStore;
208  }
209 
210  @Override
211  public PolicyStore getPolicyStore() {
212  if (policyStore == null) {
213  policyStore = createPolicyWrapper(storeFactory);
214  }
215  return policyStore;
216  }
217 
218  @Override
219  public PermissionTicketStore getPermissionTicketStore() {
221  }
222 
223  @Override
224  public void close() {
226  }
227  };
228  }
void close()
Definition: AuthorizationProvider.java:178
PermissionTicketStore getPermissionTicketStore()
PolicyStore createPolicyWrapper(StoreFactory storeFactory)
Definition: AuthorizationProvider.java:280
ResourceStore createResourceStoreWrapper(StoreFactory storeFactory)
Definition: AuthorizationProvider.java:430
StoreFactory storeFactory
Definition: AuthorizationProvider.java:79
ScopeStore createScopeWrapper(StoreFactory storeFactory)
Definition: AuthorizationProvider.java:230

◆ evaluators()

Evaluators org.keycloak.authorization.AuthorizationProvider.evaluators ( )
inline

Returns a Evaluators instance from where org.keycloak.authorization.policy.evaluation.PolicyEvaluator instances can be obtained.

戻り値
a Evaluators instance
98  {
99  return new Evaluators(this);
100  }

◆ getKeycloakSession()

KeycloakSession org.keycloak.authorization.AuthorizationProvider.getKeycloakSession ( )
inline
165  {
166  return this.keycloakSession;
167  }
final KeycloakSession keycloakSession
Definition: AuthorizationProvider.java:82

◆ getLocalStoreFactory()

StoreFactory org.keycloak.authorization.AuthorizationProvider.getLocalStoreFactory ( )
inline

No cache sits in front of this

戻り値
122  {
123  if (storeFactoryDelegate != null) return storeFactoryDelegate;
124  storeFactoryDelegate = keycloakSession.getProvider(StoreFactory.class);
125  return storeFactoryDelegate;
126  }
final KeycloakSession keycloakSession
Definition: AuthorizationProvider.java:82
< T extends Provider > T getProvider(Class< T > clazz)
StoreFactory storeFactoryDelegate
Definition: AuthorizationProvider.java:80

◆ getPolicyEvaluator()

PolicyEvaluator org.keycloak.authorization.AuthorizationProvider.getPolicyEvaluator ( )
inline
173  {
174  return policyEvaluator;
175  }
final PolicyEvaluator policyEvaluator
Definition: AuthorizationProvider.java:78

◆ getProvider()

public<P extends PolicyProvider> P org.keycloak.authorization.AuthorizationProvider.getProvider ( String  type)
inlinepackage

Returns a PolicyProviderFactory given a type.

引数
typethe type of the policy provider
<P>the expected type of the provider
戻り値
a PolicyProvider with the given type
155  {
156  PolicyProviderFactory policyProviderFactory = policyProviderFactories.get(type);
157 
158  if (policyProviderFactory == null) {
159  return null;
160  }
161 
162  return (P) policyProviderFactory.create(this);
163  }
final Map< String, PolicyProviderFactory > policyProviderFactories
Definition: AuthorizationProvider.java:81

◆ getProviderFactories()

Collection<PolicyProviderFactory> org.keycloak.authorization.AuthorizationProvider.getProviderFactories ( )
inline

Returns the registered PolicyProviderFactory.

戻り値
a List containing all registered PolicyProviderFactory
133  {
134  return this.policyProviderFactories.values();
135  }
final Map< String, PolicyProviderFactory > policyProviderFactories
Definition: AuthorizationProvider.java:81

◆ getProviderFactory()

public<F extends PolicyProviderFactory> F org.keycloak.authorization.AuthorizationProvider.getProviderFactory ( String  type)
inlinepackage

Returns a PolicyProviderFactory given a type.

引数
typethe type of the policy provider
<F>the expected type of the provider
戻り値
a PolicyProviderFactory with the given type
144  {
145  return (F) policyProviderFactories.get(type);
146  }
final Map< String, PolicyProviderFactory > policyProviderFactories
Definition: AuthorizationProvider.java:81

◆ getRealm()

RealmModel org.keycloak.authorization.AuthorizationProvider.getRealm ( )
inline
169  {
170  return realm;
171  }
final RealmModel realm
Definition: AuthorizationProvider.java:83

◆ getStoreFactory()

StoreFactory org.keycloak.authorization.AuthorizationProvider.getStoreFactory ( )
inline

Cache sits in front of this

Returns a StoreFactory.

戻り値
the StoreFactory
109  {
110  if (storeFactory != null) return storeFactory;
111  storeFactory = keycloakSession.getProvider(CachedStoreFactoryProvider.class);
114  return storeFactory;
115  }
StoreFactory getLocalStoreFactory()
Definition: AuthorizationProvider.java:122
final KeycloakSession keycloakSession
Definition: AuthorizationProvider.java:82
< T extends Provider > T getProvider(Class< T > clazz)
StoreFactory createStoreFactory(StoreFactory storeFactory)
Definition: AuthorizationProvider.java:182
StoreFactory storeFactory
Definition: AuthorizationProvider.java:79

メンバ詳解

◆ keycloakSession

final KeycloakSession org.keycloak.authorization.AuthorizationProvider.keycloakSession
private

◆ policyEvaluator

final PolicyEvaluator org.keycloak.authorization.AuthorizationProvider.policyEvaluator
private

◆ policyProviderFactories

final Map<String, PolicyProviderFactory> org.keycloak.authorization.AuthorizationProvider.policyProviderFactories
private

◆ realm

final RealmModel org.keycloak.authorization.AuthorizationProvider.realm
private

◆ storeFactory

StoreFactory org.keycloak.authorization.AuthorizationProvider.storeFactory
private

◆ storeFactoryDelegate

StoreFactory org.keycloak.authorization.AuthorizationProvider.storeFactoryDelegate
private

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