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

公開メンバ関数

 AbstractPermissionService (KeycloakIdentity identity, ResourceServer resourceServer, AuthorizationProvider authorization)
 
Response create (List< PermissionRequest > request)
 

非公開メンバ関数

List< Permission > verifyRequestedResource (List< PermissionRequest > request)
 
Set< String > verifyRequestedScopes (PermissionRequest request, Resource resource)
 
String createPermissionTicket (List< PermissionRequest > request)
 

非公開変数類

final AuthorizationProvider authorization
 
final KeycloakIdentity identity
 
final ResourceServer resourceServer
 

詳解

著者
Pedro Igor

構築子と解体子

◆ AbstractPermissionService()

org.keycloak.authorization.protection.permission.AbstractPermissionService.AbstractPermissionService ( KeycloakIdentity  identity,
ResourceServer  resourceServer,
AuthorizationProvider  authorization 
)
inline
51  {
52  this.identity = identity;
55  }
final AuthorizationProvider authorization
Definition: AbstractPermissionService.java:47
final KeycloakIdentity identity
Definition: AbstractPermissionService.java:48
final ResourceServer resourceServer
Definition: AbstractPermissionService.java:49

関数詳解

◆ create()

Response org.keycloak.authorization.protection.permission.AbstractPermissionService.create ( List< PermissionRequest >  request)
inline
57  {
58  if (request == null || request.isEmpty()) {
59  throw new ErrorResponseException("invalid_permission_request", "Invalid permission request.", Response.Status.BAD_REQUEST);
60  }
61 
62  return Response.status(Response.Status.CREATED).entity(new PermissionResponse(createPermissionTicket(request))).build();
63  }
String createPermissionTicket(List< PermissionRequest > request)
Definition: AbstractPermissionService.java:148

◆ createPermissionTicket()

String org.keycloak.authorization.protection.permission.AbstractPermissionService.createPermissionTicket ( List< PermissionRequest >  request)
inlineprivate
148  {
149  List<Permission> permissions = verifyRequestedResource(request);
150 
151  ClientModel targetClient = authorization.getRealm().getClientById(resourceServer.getId());
152  PermissionTicketToken token = new PermissionTicketToken(permissions, targetClient.getClientId(), this.identity.getAccessToken());
153  Map<String, List<String>> claims = new HashMap<>();
154 
155  for (PermissionRequest permissionRequest : request) {
156  Map<String, List<String>> requestClaims = permissionRequest.getClaims();
157 
158  if (requestClaims != null) {
159  claims.putAll(requestClaims);
160  }
161  }
162 
163  if (!claims.isEmpty()) {
164  token.setClaims(claims);
165  }
166 
167  return this.authorization.getKeycloakSession().tokens().encode(token);
168  }
AccessToken getAccessToken()
Definition: KeycloakIdentity.java:228
final AuthorizationProvider authorization
Definition: AbstractPermissionService.java:47
final KeycloakIdentity identity
Definition: AbstractPermissionService.java:48
final ResourceServer resourceServer
Definition: AbstractPermissionService.java:49
List< Permission > verifyRequestedResource(List< PermissionRequest > request)
Definition: AbstractPermissionService.java:65

◆ verifyRequestedResource()

List<Permission> org.keycloak.authorization.protection.permission.AbstractPermissionService.verifyRequestedResource ( List< PermissionRequest >  request)
inlineprivate
65  {
66  ResourceStore resourceStore = authorization.getStoreFactory().getResourceStore();
67  List<Permission> requestedResources = new ArrayList<>();
68 
69  for (PermissionRequest permissionRequest : request) {
70  String resourceSetId = permissionRequest.getResourceId();
71  List<Resource> resources = new ArrayList<>();
72 
73  if (resourceSetId == null) {
74  if (permissionRequest.getScopes() == null || permissionRequest.getScopes().isEmpty()) {
75  throw new ErrorResponseException("invalid_resource_id", "Resource id or name not provided.", Response.Status.BAD_REQUEST);
76  }
77  } else {
78  Resource resource = resourceStore.findById(resourceSetId, resourceServer.getId());
79 
80  if (resource != null) {
81  resources.add(resource);
82  } else {
83  Resource userResource = resourceStore.findByName(resourceSetId, identity.getId(), this.resourceServer.getId());
84 
85  if (userResource != null) {
86  resources.add(userResource);
87  }
88 
89  if (!identity.isResourceServer()) {
90  Resource serverResource = resourceStore.findByName(resourceSetId, this.resourceServer.getId());
91 
92  if (serverResource != null) {
93  resources.add(serverResource);
94  }
95  }
96  }
97 
98  if (resources.isEmpty()) {
99  throw new ErrorResponseException("invalid_resource_id", "Resource set with id [" + resourceSetId + "] does not exists in this server.", Response.Status.BAD_REQUEST);
100  }
101  }
102 
103  if (resources.isEmpty()) {
104  requestedResources.add(new Permission(null, verifyRequestedScopes(permissionRequest, null)));
105  } else {
106  for (Resource resource : resources) {
107  requestedResources.add(new Permission(resource.getId(), verifyRequestedScopes(permissionRequest, resource)));
108  }
109  }
110  }
111 
112  return requestedResources;
113  }
Set< String > verifyRequestedScopes(PermissionRequest request, Resource resource)
Definition: AbstractPermissionService.java:115
final AuthorizationProvider authorization
Definition: AbstractPermissionService.java:47
String getId()
Definition: KeycloakIdentity.java:214
boolean isResourceServer()
Definition: KeycloakIdentity.java:232
final KeycloakIdentity identity
Definition: AbstractPermissionService.java:48
final ResourceServer resourceServer
Definition: AbstractPermissionService.java:49

◆ verifyRequestedScopes()

Set<String> org.keycloak.authorization.protection.permission.AbstractPermissionService.verifyRequestedScopes ( PermissionRequest  request,
Resource  resource 
)
inlineprivate
115  {
116  Set<String> requestScopes = request.getScopes();
117 
118  if (requestScopes == null) {
119  return Collections.emptySet();
120  }
121 
122  ResourceStore resourceStore = authorization.getStoreFactory().getResourceStore();
123 
124  return requestScopes.stream().map(scopeName -> {
125  Scope scope = null;
126 
127  if (resource != null) {
128  scope = resource.getScopes().stream().filter(scope1 -> scope1.getName().equals(scopeName)).findFirst().orElse(null);
129 
130  if (scope == null && resource.getType() != null) {
131  scope = resourceStore.findByType(resource.getType(), resourceServer.getId()).stream()
132  .filter(baseResource -> baseResource.getOwner().equals(resource.getResourceServer().getId()))
133  .flatMap(resource1 -> resource1.getScopes().stream())
134  .filter(baseScope -> baseScope.getName().equals(scopeName)).findFirst().orElse(null);
135  }
136  } else {
137  scope = authorization.getStoreFactory().getScopeStore().findByName(scopeName, resourceServer.getId());
138  }
139 
140  if (scope == null) {
141  throw new ErrorResponseException("invalid_scope", "Scope [" + scopeName + "] is invalid", Response.Status.BAD_REQUEST);
142  }
143 
144  return scope.getName();
145  }).collect(Collectors.toSet());
146  }
final AuthorizationProvider authorization
Definition: AbstractPermissionService.java:47
final ResourceServer resourceServer
Definition: AbstractPermissionService.java:49

メンバ詳解

◆ authorization

final AuthorizationProvider org.keycloak.authorization.protection.permission.AbstractPermissionService.authorization
private

◆ identity

final KeycloakIdentity org.keycloak.authorization.protection.permission.AbstractPermissionService.identity
private

◆ resourceServer

final ResourceServer org.keycloak.authorization.protection.permission.AbstractPermissionService.resourceServer
private

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