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

クラス

class  CloseableKeycloakIdentity
 
class  EvaluationDecisionCollector
 

公開メンバ関数

Response evaluate (PolicyEvaluationRequest evaluationRequest)
 

関数

 PolicyEvaluationService (ResourceServer resourceServer, AuthorizationProvider authorization, AdminPermissionEvaluator auth)
 

非公開メンバ関数

EvaluationDecisionCollector evaluate (PolicyEvaluationRequest evaluationRequest, EvaluationContext evaluationContext, AuthorizationRequest request)
 
EvaluationContext createEvaluationContext (PolicyEvaluationRequest representation, KeycloakIdentity identity)
 
List< ResourcePermission > createPermissions (PolicyEvaluationRequest representation, EvaluationContext evaluationContext, AuthorizationProvider authorization, AuthorizationRequest request)
 
CloseableKeycloakIdentity createIdentity (PolicyEvaluationRequest representation)
 

非公開変数類

final AuthorizationProvider authorization
 
final AdminPermissionEvaluator auth
 
final ResourceServer resourceServer
 

静的非公開変数類

static final Logger logger = Logger.getLogger(PolicyEvaluationService.class)
 

詳解

著者
Pedro Igor

構築子と解体子

◆ PolicyEvaluationService()

org.keycloak.authorization.admin.PolicyEvaluationService.PolicyEvaluationService ( ResourceServer  resourceServer,
AuthorizationProvider  authorization,
AdminPermissionEvaluator  auth 
)
inlinepackage
88  {
91  this.auth = auth;
92  }
final ResourceServer resourceServer
Definition: PolicyEvaluationService.java:86
final AuthorizationProvider authorization
Definition: PolicyEvaluationService.java:84
final AdminPermissionEvaluator auth
Definition: PolicyEvaluationService.java:85

関数詳解

◆ createEvaluationContext()

EvaluationContext org.keycloak.authorization.admin.PolicyEvaluationService.createEvaluationContext ( PolicyEvaluationRequest  representation,
KeycloakIdentity  identity 
)
inlineprivate
134  {
135  return new KeycloakEvaluationContext(identity, this.authorization.getKeycloakSession()) {
136  @Override
137  public Attributes getAttributes() {
138  Map<String, Collection<String>> attributes = new HashMap<>(super.getAttributes().toMap());
139  Map<String, String> givenAttributes = representation.getContext().get("attributes");
140 
141  if (givenAttributes != null) {
142  givenAttributes.forEach((key, entryValue) -> {
143  if (entryValue != null) {
144  List<String> values = new ArrayList();
145 
146  for (String value : entryValue.split(",")) {
147  values.add(value);
148  }
149 
150  attributes.put(key, values);
151  }
152  });
153  }
154 
155  return Attributes.from(attributes);
156  }
157  };
158  }
final AuthorizationProvider authorization
Definition: PolicyEvaluationService.java:84

◆ createIdentity()

CloseableKeycloakIdentity org.keycloak.authorization.admin.PolicyEvaluationService.createIdentity ( PolicyEvaluationRequest  representation)
inlineprivate
215  {
216  KeycloakSession keycloakSession = this.authorization.getKeycloakSession();
217  RealmModel realm = keycloakSession.getContext().getRealm();
218  AccessToken accessToken = null;
219 
220 
221  String subject = representation.getUserId();
222 
223  UserSessionModel userSession = null;
224  if (subject != null) {
225  UserModel userModel = keycloakSession.users().getUserById(subject, realm);
226 
227  if (userModel != null) {
228  String clientId = representation.getClientId();
229 
230  if (clientId == null) {
231  clientId = resourceServer.getId();
232  }
233 
234  if (clientId != null) {
235  ClientModel clientModel = realm.getClientById(clientId);
236 
237  AuthenticationSessionModel authSession = keycloakSession.authenticationSessions().createRootAuthenticationSession(realm)
238  .createAuthenticationSession(clientModel);
239  authSession.setProtocol(OIDCLoginProtocol.LOGIN_PROTOCOL);
240  authSession.setAuthenticatedUser(userModel);
241  userSession = keycloakSession.sessions().createUserSession(authSession.getParentSession().getId(), realm, userModel, userModel.getUsername(), "127.0.0.1", "passwd", false, null, null);
242 
243  AuthenticationManager.setClientScopesInSession(authSession);
244  ClientSessionContext clientSessionCtx = TokenManager.attachAuthenticationSession(keycloakSession, userSession, authSession);
245 
246  accessToken = new TokenManager().createClientAccessToken(keycloakSession, realm, clientModel, userModel, userSession, clientSessionCtx);
247  }
248  }
249  }
250 
251  if (accessToken == null) {
252  accessToken = new AccessToken();
253 
254  accessToken.subject(representation.getUserId());
255  accessToken.issuedFor(representation.getClientId());
256  accessToken.audience(representation.getClientId());
257  accessToken.issuer(Urls.realmIssuer(keycloakSession.getContext().getUri().getBaseUri(), realm.getName()));
258  accessToken.setRealmAccess(new AccessToken.Access());
259 
260  }
261 
262  AccessToken.Access realmAccess = accessToken.getRealmAccess();
263 
264  if (representation.getRoleIds() != null) {
265  representation.getRoleIds().forEach(roleName -> realmAccess.addRole(roleName));
266  }
267 
268  return new CloseableKeycloakIdentity(accessToken, keycloakSession, userSession);
269  }
final ResourceServer resourceServer
Definition: PolicyEvaluationService.java:86
final AuthorizationProvider authorization
Definition: PolicyEvaluationService.java:84

◆ createPermissions()

List<ResourcePermission> org.keycloak.authorization.admin.PolicyEvaluationService.createPermissions ( PolicyEvaluationRequest  representation,
EvaluationContext  evaluationContext,
AuthorizationProvider  authorization,
AuthorizationRequest  request 
)
inlineprivate
160  {
161  return representation.getResources().stream().flatMap((Function<ResourceRepresentation, Stream<ResourcePermission>>) resource -> {
162  StoreFactory storeFactory = authorization.getStoreFactory();
163  if (resource == null) {
164  resource = new ResourceRepresentation();
165  }
166 
167  Set<ScopeRepresentation> givenScopes = resource.getScopes();
168 
169  if (givenScopes == null) {
170  givenScopes = new HashSet();
171  }
172 
173  ScopeStore scopeStore = storeFactory.getScopeStore();
174 
175  Set<Scope> scopes = givenScopes.stream().map(scopeRepresentation -> scopeStore.findByName(scopeRepresentation.getName(), resourceServer.getId())).collect(Collectors.toSet());
176 
177  if (resource.getId() != null) {
178  Resource resourceModel = storeFactory.getResourceStore().findById(resource.getId(), resourceServer.getId());
179  return new ArrayList<>(Arrays.asList(Permissions.createResourcePermissions(resourceModel, scopes, authorization, request))).stream();
180  } else if (resource.getType() != null) {
181  return storeFactory.getResourceStore().findByType(resource.getType(), resourceServer.getId()).stream().map(resource1 -> Permissions.createResourcePermissions(resource1, scopes, authorization, request));
182  } else {
183  if (scopes.isEmpty()) {
184  return Permissions.all(resourceServer, evaluationContext.getIdentity(), authorization, request).stream();
185  }
186 
187  List<Resource> resources = storeFactory.getResourceStore().findByScope(scopes.stream().map(Scope::getId).collect(Collectors.toList()), resourceServer.getId());
188 
189  if (resources.isEmpty()) {
190  return scopes.stream().map(scope -> new ResourcePermission(null, new ArrayList<>(Arrays.asList(scope)), resourceServer));
191  }
192 
193 
194  return resources.stream().map(resource12 -> Permissions.createResourcePermissions(resource12, scopes, authorization, request));
195  }
196  }).collect(Collectors.toList());
197  }
final ResourceServer resourceServer
Definition: PolicyEvaluationService.java:86
final AuthorizationProvider authorization
Definition: PolicyEvaluationService.java:84

◆ evaluate() [1/2]

Response org.keycloak.authorization.admin.PolicyEvaluationService.evaluate ( PolicyEvaluationRequest  evaluationRequest)
inline
97  {
99  CloseableKeycloakIdentity identity = createIdentity(evaluationRequest);
100  try {
101  AuthorizationRequest request = new AuthorizationRequest();
102  Map<String, List<String>> claims = new HashMap<>();
103  Map<String, String> givenAttributes = evaluationRequest.getContext().get("attributes");
104 
105  if (givenAttributes != null) {
106  givenAttributes.forEach((key, entryValue) -> {
107  if (entryValue != null) {
108  List<String> values = new ArrayList();
109 
110  for (String value : entryValue.split(",")) {
111  values.add(value);
112  }
113 
114  claims.put(key, values);
115  }
116  });
117  }
118 
119  request.setClaims(claims);
120 
121  return Response.ok(PolicyEvaluationResponseBuilder.build(evaluate(evaluationRequest, createEvaluationContext(evaluationRequest, identity), request), resourceServer, authorization, identity)).build();
122  } catch (Exception e) {
123  logger.error("Error while evaluating permissions", e);
124  throw new ErrorResponseException(OAuthErrorException.SERVER_ERROR, "Error while evaluating permissions.", Status.INTERNAL_SERVER_ERROR);
125  } finally {
126  identity.close();
127  }
128  }
CloseableKeycloakIdentity createIdentity(PolicyEvaluationRequest representation)
Definition: PolicyEvaluationService.java:215
final ResourceServer resourceServer
Definition: PolicyEvaluationService.java:86
final AuthorizationProvider authorization
Definition: PolicyEvaluationService.java:84
EvaluationContext createEvaluationContext(PolicyEvaluationRequest representation, KeycloakIdentity identity)
Definition: PolicyEvaluationService.java:134
static final Logger logger
Definition: PolicyEvaluationService.java:82
final AdminPermissionEvaluator auth
Definition: PolicyEvaluationService.java:85
Response evaluate(PolicyEvaluationRequest evaluationRequest)
Definition: PolicyEvaluationService.java:97

◆ evaluate() [2/2]

EvaluationDecisionCollector org.keycloak.authorization.admin.PolicyEvaluationService.evaluate ( PolicyEvaluationRequest  evaluationRequest,
EvaluationContext  evaluationContext,
AuthorizationRequest  request 
)
inlineprivate
130  {
131  return authorization.evaluators().from(createPermissions(evaluationRequest, evaluationContext, authorization, request), evaluationContext).evaluate(new EvaluationDecisionCollector(authorization, resourceServer, request));
132  }
final ResourceServer resourceServer
Definition: PolicyEvaluationService.java:86
final AuthorizationProvider authorization
Definition: PolicyEvaluationService.java:84
List< ResourcePermission > createPermissions(PolicyEvaluationRequest representation, EvaluationContext evaluationContext, AuthorizationProvider authorization, AuthorizationRequest request)
Definition: PolicyEvaluationService.java:160

メンバ詳解

◆ auth

final AdminPermissionEvaluator org.keycloak.authorization.admin.PolicyEvaluationService.auth
private

◆ authorization

final AuthorizationProvider org.keycloak.authorization.admin.PolicyEvaluationService.authorization
private

◆ logger

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

◆ resourceServer

final ResourceServer org.keycloak.authorization.admin.PolicyEvaluationService.resourceServer
private

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