keycloak
公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
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 EventBuilder event
Definition: ClientRegistrationAuth.java:58
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
final ClientRegistrationProvider provider
Definition: ClientRegistrationAuth.java:57

関数詳解

◆ 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 EventBuilder event
Definition: ClientRegistrationAuth.java:58
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56

◆ 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
Map< String, Object > getOtherClaims()
Definition: JsonWebToken.java:225

◆ 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  }
String getIssuedFor()
Definition: JsonWebToken.java:210
boolean hasRoleInModel(String[] roles)
Definition: ClientRegistrationAuth.java:267
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
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  }
ClientModel getClientByClientId(String clientId)
RealmModel realm
Definition: ClientRegistrationAuth.java:60
String getSubject()
Definition: JsonWebToken.java:183
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
ClientModel getMasterAdminClient()
UserModel getUserById(String id, RealmModel realm)

◆ 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
ClientModel getMasterAdminClient()
Map< String, Object > getOtherClaims()
Definition: JsonWebToken.java:225

◆ init()

void org.keycloak.services.clientregistration.ClientRegistrationAuth.init ( )
inlineprivate
72  {
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()) {
96  if (initialAccessModel == null) {
97  throw unauthorized("Initial Access Token not found");
98  }
99  }
100  }
String getId()
Definition: JsonWebToken.java:64
ClientInitialAccessModel initialAccessModel
Definition: ClientRegistrationAuth.java:62
boolean isInitialAccessToken()
Definition: ClientRegistrationAuth.java:118
RealmModel realm
Definition: ClientRegistrationAuth.java:60
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
String token
Definition: ClientRegistrationAuth.java:64
String kid
Definition: ClientRegistrationAuth.java:63
ClientInitialAccessModel getClientInitialAccessModel(RealmModel realm, String id)

◆ isBearerToken()

boolean org.keycloak.services.clientregistration.ClientRegistrationAuth.isBearerToken ( )
inlineprivate
114  {
115  return jwt != null && TokenUtil.TOKEN_TYPE_BEARER.equals(jwt.getType());
116  }
String getType()
Definition: JsonWebToken.java:196
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  }
String getType()
Definition: JsonWebToken.java:196
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  }
String getType()
Definition: JsonWebToken.java:196
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()) {
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  }
ClientInitialAccessModel initialAccessModel
Definition: ClientRegistrationAuth.java:62
boolean isInitialAccessToken()
Definition: ClientRegistrationAuth.java:118
Failure forbidden()
Definition: ClientRegistrationAuth.java:355
boolean isBearerToken()
Definition: ClientRegistrationAuth.java:114
void init()
Definition: ClientRegistrationAuth.java:72
int getTimestamp()
Definition: ClientInitialAccessModel.java:43
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
int getExpiration()
Definition: ClientInitialAccessModel.java:51
boolean hasRole(String... roles)
Definition: ClientRegistrationAuth.java:253
int getRemainingCount()
Definition: ClientInitialAccessModel.java:67

◆ 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  }
Failure forbidden()
Definition: ClientRegistrationAuth.java:355
RegistrationAuth requireUpdateAuth(ClientModel client)
Definition: ClientRegistrationAuth.java:227
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
final ClientRegistrationProvider provider
Definition: ClientRegistrationAuth.java:57

◆ 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  }
Failure forbidden()
Definition: ClientRegistrationAuth.java:355
RegistrationAuth requireUpdateAuth(ClientModel client)
Definition: ClientRegistrationAuth.java:227

◆ 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  }
String getId()
Definition: JsonWebToken.java:64
Failure forbidden()
Definition: ClientRegistrationAuth.java:355
boolean isBearerToken()
Definition: ClientRegistrationAuth.java:114
void init()
Definition: ClientRegistrationAuth.java:72
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
RegistrationAuth getRegistrationAuth()
Definition: ClientRegistrationAuth.java:200
boolean hasRole(String... roles)
Definition: ClientRegistrationAuth.java:253
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
Failure notFound()
Definition: ClientRegistrationAuth.java:364
boolean isRegistrationAccessToken()
Definition: ClientRegistrationAuth.java:122

◆ 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  }
String getId()
Definition: JsonWebToken.java:64
boolean authenticateClient(ClientModel client)
Definition: ClientRegistrationAuth.java:319
boolean isInitialAccessToken()
Definition: ClientRegistrationAuth.java:118
Failure forbidden()
Definition: ClientRegistrationAuth.java:355
boolean isBearerToken()
Definition: ClientRegistrationAuth.java:114
void init()
Definition: ClientRegistrationAuth.java:72
Failure unauthorized(String errorDescription)
Definition: ClientRegistrationAuth.java:350
final KeycloakSession session
Definition: ClientRegistrationAuth.java:56
RegistrationAuth getRegistrationAuth()
Definition: ClientRegistrationAuth.java:200
boolean hasRole(String... roles)
Definition: ClientRegistrationAuth.java:253
JsonWebToken jwt
Definition: ClientRegistrationAuth.java:61
Failure notFound()
Definition: ClientRegistrationAuth.java:364
boolean isRegistrationAccessToken()
Definition: ClientRegistrationAuth.java:122
final ClientRegistrationProvider provider
Definition: ClientRegistrationAuth.java:57

◆ 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

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