keycloak-service
公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.keycloak.services.clientregistration.ClientRegistrationAuth クラス
org.keycloak.services.clientregistration.ClientRegistrationAuth 連携図
Collaboration graph

公開メンバ関数

 ClientRegistrationAuth (KeycloakSession session, ClientRegistrationProvider provider, EventBuilder event)
 
String getToken ()
 
String getKid ()
 
JsonWebToken getJwt ()
 
boolean isInitialAccessToken ()
 
boolean isRegistrationAccessToken ()
 
RegistrationAuth requireCreate (ClientRegistrationContext context)
 
void requireView (ClientModel client)
 
RegistrationAuth getRegistrationAuth ()
 
RegistrationAuth requireUpdate (ClientRegistrationContext context, ClientModel client)
 
void requireDelete (ClientModel client)
 
ClientInitialAccessModel getInitialAccessModel ()
 

非公開メンバ関数

void init ()
 
boolean isBearerToken ()
 
RegistrationAuth requireUpdateAuth (ClientModel client)
 
boolean hasRole (String... roles)
 
boolean hasRoleInModel (String[] roles)
 
boolean hasRoleInToken (String[] role)
 
boolean authenticateClient (ClientModel client)
 
Failure unauthorized (String errorDescription)
 
Failure forbidden ()
 
Failure forbidden (String errorDescription)
 
Failure notFound ()
 

非公開変数類

final KeycloakSession session
 
final ClientRegistrationProvider provider
 
final EventBuilder event
 
RealmModel realm
 
JsonWebToken jwt
 
ClientInitialAccessModel initialAccessModel
 
String kid
 
String token
 

詳解

著者
Stian Thorgersen

構築子と解体子

◆ ClientRegistrationAuth()

org.keycloak.services.clientregistration.ClientRegistrationAuth.ClientRegistrationAuth ( KeycloakSession  session,
ClientRegistrationProvider  provider,
EventBuilder  event 
)
inline
66  {
67  this.session = session;
68  this.provider = provider;
69  this.event = event;
70  }
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
final ClientRegistrationProvider provider
Definition: ClientRegistrationAuth.java:57
final EventBuilder event
Definition: ClientRegistrationAuth.java:58

関数詳解

◆ authenticateClient()

boolean org.keycloak.services.clientregistration.ClientRegistrationAuth.authenticateClient ( ClientModel  client)
inlineprivate
319  {
320  if (client == null) {
321  return false;
322  }
323 
324  if (client.isPublicClient()) {
325  return true;
326  }
327 
328  AuthenticationProcessor processor = AuthorizeClientUtil.getAuthenticationProcessor(session, event);
329 
330  Response response = processor.authenticateClient();
331  if (response != null) {
332  event.client(client.getClientId()).error(Errors.NOT_ALLOWED);
333  throw unauthorized("Failed to authenticate client");
334  }
335 
336  ClientModel authClient = processor.getClient();
337  if (authClient == null) {
338  event.client(client.getClientId()).error(Errors.NOT_ALLOWED);
339  throw unauthorized("No client authenticated");
340  }
341 
342  if (!authClient.getClientId().equals(client.getClientId())) {
343  event.client(client.getClientId()).error(Errors.NOT_ALLOWED);
344  throw unauthorized("Different client authenticated");
345  }
346 
347  return true;
348  }
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
final EventBuilder event
Definition: ClientRegistrationAuth.java:58

◆ forbidden() [1/2]

Failure org.keycloak.services.clientregistration.ClientRegistrationAuth.forbidden ( )
inlineprivate
355  {
356  return forbidden("Forbidden");
357  }
Failure forbidden()
Definition: ClientRegistrationAuth.java:355

◆ forbidden() [2/2]

Failure org.keycloak.services.clientregistration.ClientRegistrationAuth.forbidden ( String  errorDescription)
inlineprivate
359  {
360  event.error(Errors.NOT_ALLOWED);
361  throw new ErrorResponseException(OAuthErrorException.INSUFFICIENT_SCOPE, errorDescription, Response.Status.FORBIDDEN);
362  }

◆ getInitialAccessModel()

ClientInitialAccessModel org.keycloak.services.clientregistration.ClientRegistrationAuth.getInitialAccessModel ( )
inline
249  {
250  return initialAccessModel;
251  }
ClientInitialAccessModel initialAccessModel
Definition: ClientRegistrationAuth.java:62

◆ getJwt()

JsonWebToken org.keycloak.services.clientregistration.ClientRegistrationAuth.getJwt ( )
inline
110  {
111  return jwt;
112  }
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61

◆ getKid()

String org.keycloak.services.clientregistration.ClientRegistrationAuth.getKid ( )
inline
106  {
107  return kid;
108  }
String kid
Definition: ClientRegistrationAuth.java:63

◆ getRegistrationAuth()

RegistrationAuth org.keycloak.services.clientregistration.ClientRegistrationAuth.getRegistrationAuth ( )
inline
200  {
201  String str = (String) jwt.getOtherClaims().get(RegistrationAccessToken.REGISTRATION_AUTH);
202  return RegistrationAuth.fromString(str);
203  }
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61

◆ getToken()

String org.keycloak.services.clientregistration.ClientRegistrationAuth.getToken ( )
inline
102  {
103  return token;
104  }
String token
Definition: ClientRegistrationAuth.java:64

◆ hasRole()

boolean org.keycloak.services.clientregistration.ClientRegistrationAuth.hasRole ( String...  roles)
inlineprivate
253  {
254  try {
255  if (jwt.getIssuedFor().equals(Constants.ADMIN_CLI_CLIENT_ID)
256  || jwt.getIssuedFor().equals(Constants.ADMIN_CONSOLE_CLIENT_ID)) {
257  return hasRoleInModel(roles);
258 
259  } else {
260  return hasRoleInToken(roles);
261  }
262  } catch (Throwable t) {
263  return false;
264  }
265  }
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
boolean hasRoleInModel(String[] roles)
Definition: ClientRegistrationAuth.java:267
boolean hasRoleInToken(String[] role)
Definition: ClientRegistrationAuth.java:285

◆ hasRoleInModel()

boolean org.keycloak.services.clientregistration.ClientRegistrationAuth.hasRoleInModel ( String []  roles)
inlineprivate
267  {
268  ClientModel roleNamespace;
269  UserModel user = session.users().getUserById(jwt.getSubject(), realm);
270  if (user == null) {
271  return false;
272  }
273  if (realm.getName().equals(Config.getAdminRealm())) {
274  roleNamespace = realm.getMasterAdminClient();
275  } else {
276  roleNamespace = realm.getClientByClientId(Constants.REALM_MANAGEMENT_CLIENT_ID);
277  }
278  for (String role : roles) {
279  RoleModel roleModel = roleNamespace.getRole(role);
280  if (user.hasRole(roleModel)) return true;
281  }
282  return false;
283  }
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
RealmModel realm
Definition: ClientRegistrationAuth.java:60
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61

◆ hasRoleInToken()

boolean org.keycloak.services.clientregistration.ClientRegistrationAuth.hasRoleInToken ( String []  role)
inlineprivate
285  {
286  Map<String, Object> otherClaims = jwt.getOtherClaims();
287  if (otherClaims != null) {
288  Map<String, Map<String, List<String>>> resourceAccess = (Map<String, Map<String, List<String>>>) jwt.getOtherClaims().get("resource_access");
289  if (resourceAccess == null) {
290  return false;
291  }
292 
293  List<String> roles = null;
294 
295  Map<String, List<String>> map;
296  if (realm.getName().equals(Config.getAdminRealm())) {
297  map = resourceAccess.get(realm.getMasterAdminClient().getClientId());
298  } else {
299  map = resourceAccess.get(Constants.REALM_MANAGEMENT_CLIENT_ID);
300  }
301 
302  if (map != null) {
303  roles = map.get("roles");
304  }
305 
306  if (roles == null) {
307  return false;
308  }
309 
310  for (String r : role) {
311  if (roles.contains(r)) {
312  return true;
313  }
314  }
315  }
316  return false;
317  }
RealmModel realm
Definition: ClientRegistrationAuth.java:60
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61

◆ init()

void org.keycloak.services.clientregistration.ClientRegistrationAuth.init ( )
inlineprivate
72  {
73  realm = session.getContext().getRealm();
74 
75  String authorizationHeader = session.getContext().getRequestHeaders().getRequestHeaders().getFirst(HttpHeaders.AUTHORIZATION);
76  if (authorizationHeader == null) {
77  return;
78  }
79 
80  String[] split = authorizationHeader.split(" ");
81  if (!split[0].equalsIgnoreCase("bearer")) {
82  return;
83  }
84 
85  token = split[1];
86 
87  ClientRegistrationTokenUtils.TokenVerification tokenVerification = ClientRegistrationTokenUtils.verifyToken(session, realm, token);
88  if (tokenVerification.getError() != null) {
89  throw unauthorized(tokenVerification.getError().getMessage());
90  }
91  kid = tokenVerification.getKid();
92  jwt = tokenVerification.getJwt();
93 
94  if (isInitialAccessToken()) {
95  initialAccessModel = session.realms().getClientInitialAccessModel(session.getContext().getRealm(), jwt.getId());
96  if (initialAccessModel == null) {
97  throw unauthorized("Initial Access Token not found");
98  }
99  }
100  }
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
RealmModel realm
Definition: ClientRegistrationAuth.java:60
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
String kid
Definition: ClientRegistrationAuth.java:63
String token
Definition: ClientRegistrationAuth.java:64
boolean isInitialAccessToken()
Definition: ClientRegistrationAuth.java:118
ClientInitialAccessModel initialAccessModel
Definition: ClientRegistrationAuth.java:62

◆ isBearerToken()

boolean org.keycloak.services.clientregistration.ClientRegistrationAuth.isBearerToken ( )
inlineprivate
114  {
115  return jwt != null && TokenUtil.TOKEN_TYPE_BEARER.equals(jwt.getType());
116  }
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61

◆ isInitialAccessToken()

boolean org.keycloak.services.clientregistration.ClientRegistrationAuth.isInitialAccessToken ( )
inline
118  {
119  return jwt != null && ClientRegistrationTokenUtils.TYPE_INITIAL_ACCESS_TOKEN.equals(jwt.getType());
120  }
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61

◆ isRegistrationAccessToken()

boolean org.keycloak.services.clientregistration.ClientRegistrationAuth.isRegistrationAccessToken ( )
inline
122  {
123  return jwt != null && ClientRegistrationTokenUtils.TYPE_REGISTRATION_ACCESS_TOKEN.equals(jwt.getType());
124  }
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61

◆ notFound()

Failure org.keycloak.services.clientregistration.ClientRegistrationAuth.notFound ( )
inlineprivate
364  {
365  event.error(Errors.CLIENT_NOT_FOUND);
366  throw new ErrorResponseException(OAuthErrorException.INVALID_REQUEST, "Client not found", Response.Status.NOT_FOUND);
367  }

◆ requireCreate()

RegistrationAuth org.keycloak.services.clientregistration.ClientRegistrationAuth.requireCreate ( ClientRegistrationContext  context)
inline
126  {
127  init();
128 
129  RegistrationAuth registrationAuth = RegistrationAuth.ANONYMOUS;
130 
131  if (isBearerToken()) {
132  if (hasRole(AdminRoles.MANAGE_CLIENTS, AdminRoles.CREATE_CLIENT)) {
133  registrationAuth = RegistrationAuth.AUTHENTICATED;
134  } else {
135  throw forbidden();
136  }
137  } else if (isInitialAccessToken()) {
138  if (initialAccessModel.getRemainingCount() > 0) {
139  if (initialAccessModel.getExpiration() == 0 || (initialAccessModel.getTimestamp() + initialAccessModel.getExpiration()) > Time.currentTime()) {
140  registrationAuth = RegistrationAuth.AUTHENTICATED;
141  } else {
142  throw unauthorized("Expired initial access token");
143  }
144  } else {
145  throw unauthorized("No remaining count on initial access token");
146  }
147  }
148 
149  try {
150  ClientRegistrationPolicyManager.triggerBeforeRegister(context, registrationAuth);
151  } catch (ClientRegistrationPolicyException crpe) {
152  throw forbidden(crpe.getMessage());
153  }
154 
155  return registrationAuth;
156  }
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
void init()
Definition: ClientRegistrationAuth.java:72
boolean hasRole(String... roles)
Definition: ClientRegistrationAuth.java:253
boolean isInitialAccessToken()
Definition: ClientRegistrationAuth.java:118
ClientInitialAccessModel initialAccessModel
Definition: ClientRegistrationAuth.java:62
boolean isBearerToken()
Definition: ClientRegistrationAuth.java:114
Failure forbidden()
Definition: ClientRegistrationAuth.java:355

◆ requireDelete()

void org.keycloak.services.clientregistration.ClientRegistrationAuth.requireDelete ( ClientModel  client)
inline
217  {
218  RegistrationAuth chainType = requireUpdateAuth(client);
219 
220  try {
221  ClientRegistrationPolicyManager.triggerBeforeRemove(session, provider, chainType, client);
222  } catch (ClientRegistrationPolicyException crpe) {
223  throw forbidden(crpe.getMessage());
224  }
225  }
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
RegistrationAuth requireUpdateAuth(ClientModel client)
Definition: ClientRegistrationAuth.java:227
final ClientRegistrationProvider provider
Definition: ClientRegistrationAuth.java:57
Failure forbidden()
Definition: ClientRegistrationAuth.java:355

◆ requireUpdate()

RegistrationAuth org.keycloak.services.clientregistration.ClientRegistrationAuth.requireUpdate ( ClientRegistrationContext  context,
ClientModel  client 
)
inline
205  {
206  RegistrationAuth regAuth = requireUpdateAuth(client);
207 
208  try {
209  ClientRegistrationPolicyManager.triggerBeforeUpdate(context, regAuth, client);
210  } catch (ClientRegistrationPolicyException crpe) {
211  throw forbidden(crpe.getMessage());
212  }
213 
214  return regAuth;
215  }
RegistrationAuth requireUpdateAuth(ClientModel client)
Definition: ClientRegistrationAuth.java:227
Failure forbidden()
Definition: ClientRegistrationAuth.java:355

◆ requireUpdateAuth()

RegistrationAuth org.keycloak.services.clientregistration.ClientRegistrationAuth.requireUpdateAuth ( ClientModel  client)
inlineprivate
227  {
228  init();
229 
230  if (isBearerToken()) {
231  if (hasRole(AdminRoles.MANAGE_CLIENTS)) {
232  if (client == null) {
233  throw notFound();
234  }
235 
236  return RegistrationAuth.AUTHENTICATED;
237  } else {
238  throw forbidden();
239  }
240  } else if (isRegistrationAccessToken()) {
241  if (client != null && client.getRegistrationToken() != null && client.getRegistrationToken().equals(jwt.getId())) {
242  return getRegistrationAuth();
243  }
244  }
245 
246  throw unauthorized("Not authorized to update client. Maybe missing token or bad token type.");
247  }
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
void init()
Definition: ClientRegistrationAuth.java:72
boolean isRegistrationAccessToken()
Definition: ClientRegistrationAuth.java:122
Failure notFound()
Definition: ClientRegistrationAuth.java:364
boolean hasRole(String... roles)
Definition: ClientRegistrationAuth.java:253
RegistrationAuth getRegistrationAuth()
Definition: ClientRegistrationAuth.java:200
boolean isBearerToken()
Definition: ClientRegistrationAuth.java:114
Failure forbidden()
Definition: ClientRegistrationAuth.java:355

◆ requireView()

void org.keycloak.services.clientregistration.ClientRegistrationAuth.requireView ( ClientModel  client)
inline
158  {
159  RegistrationAuth authType = null;
160  boolean authenticated = false;
161 
162  init();
163 
164  if (isBearerToken()) {
165  if (hasRole(AdminRoles.MANAGE_CLIENTS, AdminRoles.VIEW_CLIENTS)) {
166  if (client == null) {
167  throw notFound();
168  }
169 
170  authenticated = true;
171  authType = RegistrationAuth.AUTHENTICATED;
172  } else {
173  throw forbidden();
174  }
175  } else if (isRegistrationAccessToken()) {
176  if (client != null && client.getRegistrationToken() != null && client.getRegistrationToken().equals(jwt.getId())) {
177  authenticated = true;
178  authType = getRegistrationAuth();
179  }
180  } else if (isInitialAccessToken()) {
181  throw unauthorized("Not initial access token allowed");
182  } else {
183  if (authenticateClient(client)) {
184  authenticated = true;
185  authType = RegistrationAuth.AUTHENTICATED;
186  }
187  }
188 
189  if (authenticated) {
190  try {
191  ClientRegistrationPolicyManager.triggerBeforeView(session, provider, authType, client);
192  } catch (ClientRegistrationPolicyException crpe) {
193  throw forbidden(crpe.getMessage());
194  }
195  } else {
196  throw unauthorized("Not authorized to view client. Not valid token or client credentials provided.");
197  }
198  }
boolean authenticateClient(ClientModel client)
Definition: ClientRegistrationAuth.java:319
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
final ClientRegistrationProvider provider
Definition: ClientRegistrationAuth.java:57
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
void init()
Definition: ClientRegistrationAuth.java:72
boolean isRegistrationAccessToken()
Definition: ClientRegistrationAuth.java:122
Failure notFound()
Definition: ClientRegistrationAuth.java:364
boolean hasRole(String... roles)
Definition: ClientRegistrationAuth.java:253
boolean isInitialAccessToken()
Definition: ClientRegistrationAuth.java:118
RegistrationAuth getRegistrationAuth()
Definition: ClientRegistrationAuth.java:200
boolean isBearerToken()
Definition: ClientRegistrationAuth.java:114
Failure forbidden()
Definition: ClientRegistrationAuth.java:355

◆ unauthorized()

Failure org.keycloak.services.clientregistration.ClientRegistrationAuth.unauthorized ( String  errorDescription)
inlineprivate
350  {
351  event.detail(Details.REASON, errorDescription).error(Errors.INVALID_TOKEN);
352  throw new ErrorResponseException(OAuthErrorException.INVALID_TOKEN, errorDescription, Response.Status.UNAUTHORIZED);
353  }

メンバ詳解

◆ event

final EventBuilder org.keycloak.services.clientregistration.ClientRegistrationAuth.event
private

◆ initialAccessModel

ClientInitialAccessModel org.keycloak.services.clientregistration.ClientRegistrationAuth.initialAccessModel
private

◆ jwt

JsonWebToken org.keycloak.services.clientregistration.ClientRegistrationAuth.jwt
private

◆ kid

String org.keycloak.services.clientregistration.ClientRegistrationAuth.kid
private

◆ provider

final ClientRegistrationProvider org.keycloak.services.clientregistration.ClientRegistrationAuth.provider
private

◆ realm

RealmModel org.keycloak.services.clientregistration.ClientRegistrationAuth.realm
private

◆ session

final KeycloakSession org.keycloak.services.clientregistration.ClientRegistrationAuth.session
private

◆ token

String org.keycloak.services.clientregistration.ClientRegistrationAuth.token
private

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