keycloak-service
公開メンバ関数 | 限定公開変数類 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider クラス
org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider の継承関係図
Inheritance graph
org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider 連携図
Collaboration graph

公開メンバ関数

 OIDCClientRegistrationProvider (KeycloakSession session)
 
Response createOIDC (OIDCClientRepresentation clientOIDC)
 
Response getOIDC (@PathParam("clientId") String clientId)
 
Response updateOIDC (@PathParam("clientId") String clientId, OIDCClientRepresentation clientOIDC)
 
void deleteOIDC (@PathParam("clientId") String clientId)
 
ClientRepresentation create (ClientRegistrationContext context)
 
ClientRepresentation get (String clientId)
 
ClientRepresentation update (String clientId, ClientRegistrationContext context)
 
void delete (String clientId)
 
void setAuth (ClientRegistrationAuth auth)
 
ClientRegistrationAuth getAuth ()
 
void setEvent (EventBuilder event)
 
EventBuilder getEvent ()
 
void close ()
 

限定公開変数類

KeycloakSession session
 
EventBuilder event
 
ClientRegistrationAuth auth
 

非公開メンバ関数

void updatePairwiseSubMappers (ClientModel clientModel, SubjectType subjectType, String sectorIdentifierUri)
 
void updateClientRepWithProtocolMappers (ClientModel clientModel, ClientRepresentation rep)
 

静的非公開変数類

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

詳解

著者
Stian Thorgersen

構築子と解体子

◆ OIDCClientRegistrationProvider()

org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider.OIDCClientRegistrationProvider ( KeycloakSession  session)
inline
62  {
63  super(session);
64  }
KeycloakSession session
Definition: AbstractClientRegistrationProvider.java:45

関数詳解

◆ close()

void org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.close ( )
inlineinherited
194  {
195  }

◆ create()

ClientRepresentation org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.create ( ClientRegistrationContext  context)
inlineinherited
53  {
54  ClientRepresentation client = context.getClient();
55 
56  event.event(EventType.CLIENT_REGISTER);
57 
58  RegistrationAuth registrationAuth = auth.requireCreate(context);
59 
60  ValidationMessages validationMessages = new ValidationMessages();
61  if (!context.validateClient(validationMessages)) {
62  String errorCode = validationMessages.fieldHasError("redirectUris") ? ErrorCodes.INVALID_REDIRECT_URI : ErrorCodes.INVALID_CLIENT_METADATA;
63  throw new ErrorResponseException(
64  errorCode,
65  validationMessages.getStringMessages(),
66  Response.Status.BAD_REQUEST
67  );
68  }
69 
70  try {
71  RealmModel realm = session.getContext().getRealm();
72  ClientModel clientModel = new ClientManager(new RealmManager(session)).createClient(session, realm, client, true);
73 
74  if (clientModel.isServiceAccountsEnabled()) {
75  new ClientManager(new RealmManager(session)).enableServiceAccount(clientModel);
76  }
77 
78  if (Boolean.TRUE.equals(client.getAuthorizationServicesEnabled())) {
79  RepresentationToModel.createResourceServer(clientModel, session, true);
80  }
81 
82  ClientRegistrationPolicyManager.triggerAfterRegister(context, registrationAuth, clientModel);
83 
84  client = ModelToRepresentation.toRepresentation(clientModel, session);
85 
86  client.setSecret(clientModel.getSecret());
87 
88  String registrationAccessToken = ClientRegistrationTokenUtils.updateRegistrationAccessToken(session, clientModel, registrationAuth);
89  client.setRegistrationAccessToken(registrationAccessToken);
90 
91  if (auth.isInitialAccessToken()) {
92  ClientInitialAccessModel initialAccessModel = auth.getInitialAccessModel();
93  session.realms().decreaseRemainingCount(realm, initialAccessModel);
94  }
95 
96  event.client(client.getClientId()).success();
97  return client;
98  } catch (ModelDuplicateException e) {
99  throw new ErrorResponseException(ErrorCodes.INVALID_CLIENT_METADATA, "Client Identifier in use", Response.Status.BAD_REQUEST);
100  }
101  }
ClientRegistrationAuth auth
Definition: AbstractClientRegistrationProvider.java:47
ClientInitialAccessModel getInitialAccessModel()
Definition: ClientRegistrationAuth.java:249
KeycloakSession session
Definition: AbstractClientRegistrationProvider.java:45
boolean isInitialAccessToken()
Definition: ClientRegistrationAuth.java:118
RegistrationAuth requireCreate(ClientRegistrationContext context)
Definition: ClientRegistrationAuth.java:126

◆ createOIDC()

Response org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider.createOIDC ( OIDCClientRepresentation  clientOIDC)
inline
69  {
70  if (clientOIDC.getClientId() != null) {
71  throw new ErrorResponseException(ErrorCodes.INVALID_CLIENT_METADATA, "Client Identifier included", Response.Status.BAD_REQUEST);
72  }
73 
74  try {
75  ClientRepresentation client = DescriptionConverter.toInternal(session, clientOIDC);
76  List<String> grantTypes = clientOIDC.getGrantTypes();
77 
78  if (grantTypes != null && grantTypes.contains(OAuth2Constants.UMA_GRANT_TYPE)) {
79  client.setAuthorizationServicesEnabled(true);
80  }
81 
82  OIDCClientRegistrationContext oidcContext = new OIDCClientRegistrationContext(session, client, this, clientOIDC);
83  client = create(oidcContext);
84 
85  ClientModel clientModel = session.getContext().getRealm().getClientByClientId(client.getClientId());
86  updatePairwiseSubMappers(clientModel, SubjectType.parse(clientOIDC.getSubjectType()), clientOIDC.getSectorIdentifierUri());
87  updateClientRepWithProtocolMappers(clientModel, client);
88 
89  URI uri = session.getContext().getUri().getAbsolutePathBuilder().path(client.getClientId()).build();
90  clientOIDC = DescriptionConverter.toExternalResponse(session, client, uri);
91  clientOIDC.setClientIdIssuedAt(Time.currentTime());
92  return Response.created(uri).entity(clientOIDC).build();
93  } catch (ClientRegistrationException cre) {
94  ServicesLogger.LOGGER.clientRegistrationException(cre.getMessage());
95  throw new ErrorResponseException(ErrorCodes.INVALID_CLIENT_METADATA, "Client metadata invalid", Response.Status.BAD_REQUEST);
96  }
97  }
void updateClientRepWithProtocolMappers(ClientModel clientModel, ClientRepresentation rep)
Definition: OIDCClientRegistrationProvider.java:171
KeycloakSession session
Definition: AbstractClientRegistrationProvider.java:45
void updatePairwiseSubMappers(ClientModel clientModel, SubjectType subjectType, String sectorIdentifierUri)
Definition: OIDCClientRegistrationProvider.java:137
ClientRepresentation create(ClientRegistrationContext context)
Definition: AbstractClientRegistrationProvider.java:53

◆ delete()

void org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.delete ( String  clientId)
inlineinherited
160  {
161  event.event(EventType.CLIENT_DELETE).client(clientId);
162 
163  ClientModel client = session.getContext().getRealm().getClientByClientId(clientId);
164  auth.requireDelete(client);
165 
166  if (new ClientManager(new RealmManager(session)).removeClient(session.getContext().getRealm(), client)) {
167  event.client(client.getClientId()).success();
168  } else {
169  throw new ForbiddenException();
170  }
171  }
void requireDelete(ClientModel client)
Definition: ClientRegistrationAuth.java:217
ClientRegistrationAuth auth
Definition: AbstractClientRegistrationProvider.java:47
KeycloakSession session
Definition: AbstractClientRegistrationProvider.java:45

◆ deleteOIDC()

void org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider.deleteOIDC ( @PathParam("clientId") String  clientId)
inline
133  {
134  delete(clientId);
135  }

◆ get()

ClientRepresentation org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.get ( String  clientId)
inlineinherited
103  {
104  event.event(EventType.CLIENT_INFO);
105 
106  ClientModel client = session.getContext().getRealm().getClientByClientId(clientId);
107  auth.requireView(client);
108 
109  ClientRepresentation rep = ModelToRepresentation.toRepresentation(client, session);
110  if (client.getSecret() != null) {
111  rep.setSecret(client.getSecret());
112  }
113 
115  String registrationAccessToken = ClientRegistrationTokenUtils.updateTokenSignature(session, auth);
116  rep.setRegistrationAccessToken(registrationAccessToken);
117  }
118 
119  event.client(client.getClientId()).success();
120  return rep;
121  }
ClientRegistrationAuth auth
Definition: AbstractClientRegistrationProvider.java:47
boolean isRegistrationAccessToken()
Definition: ClientRegistrationAuth.java:122
KeycloakSession session
Definition: AbstractClientRegistrationProvider.java:45
void requireView(ClientModel client)
Definition: ClientRegistrationAuth.java:158

◆ getAuth()

ClientRegistrationAuth org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.getAuth ( )
inlineinherited

org.keycloak.services.clientregistration.ClientRegistrationProviderを実装しています。

179  {
180  return this.auth;
181  }
ClientRegistrationAuth auth
Definition: AbstractClientRegistrationProvider.java:47

◆ getEvent()

EventBuilder org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.getEvent ( )
inlineinherited

org.keycloak.services.clientregistration.ClientRegistrationProviderを実装しています。

189  {
190  return event;
191  }
EventBuilder event
Definition: AbstractClientRegistrationProvider.java:46

◆ getOIDC()

Response org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider.getOIDC ( @PathParam("clientId") String  clientId)
inline
102  {
103  ClientRepresentation client = get(clientId);
104  OIDCClientRepresentation clientOIDC = DescriptionConverter.toExternalResponse(session, client, session.getContext().getUri().getRequestUri());
105  return Response.ok(clientOIDC).build();
106  }
KeycloakSession session
Definition: AbstractClientRegistrationProvider.java:45

◆ setAuth()

void org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.setAuth ( ClientRegistrationAuth  auth)
inlineinherited

org.keycloak.services.clientregistration.ClientRegistrationProviderを実装しています。

174  {
175  this.auth = auth;
176  }
ClientRegistrationAuth auth
Definition: AbstractClientRegistrationProvider.java:47

◆ setEvent()

void org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.setEvent ( EventBuilder  event)
inlineinherited

org.keycloak.services.clientregistration.ClientRegistrationProviderを実装しています。

184  {
185  this.event = event;
186  }
EventBuilder event
Definition: AbstractClientRegistrationProvider.java:46

◆ update()

ClientRepresentation org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.update ( String  clientId,
ClientRegistrationContext  context 
)
inlineinherited
123  {
124  ClientRepresentation rep = context.getClient();
125 
126  event.event(EventType.CLIENT_UPDATE).client(clientId);
127 
128  ClientModel client = session.getContext().getRealm().getClientByClientId(clientId);
129  RegistrationAuth registrationAuth = auth.requireUpdate(context, client);
130 
131  if (!client.getClientId().equals(rep.getClientId())) {
132  throw new ErrorResponseException(ErrorCodes.INVALID_CLIENT_METADATA, "Client Identifier modified", Response.Status.BAD_REQUEST);
133  }
134 
135  ValidationMessages validationMessages = new ValidationMessages();
136  if (!context.validateClient(validationMessages)) {
137  String errorCode = validationMessages.fieldHasError("redirectUris") ? ErrorCodes.INVALID_REDIRECT_URI : ErrorCodes.INVALID_CLIENT_METADATA;
138  throw new ErrorResponseException(
139  errorCode,
140  validationMessages.getStringMessages(),
141  Response.Status.BAD_REQUEST
142  );
143  }
144 
145  RepresentationToModel.updateClient(rep, client);
146  rep = ModelToRepresentation.toRepresentation(client, session);
147 
149  String registrationAccessToken = ClientRegistrationTokenUtils.updateRegistrationAccessToken(session, client, auth.getRegistrationAuth());
150  rep.setRegistrationAccessToken(registrationAccessToken);
151  }
152 
153  ClientRegistrationPolicyManager.triggerAfterUpdate(context, registrationAuth, client);
154 
155  event.client(client.getClientId()).success();
156  return rep;
157  }
RegistrationAuth requireUpdate(ClientRegistrationContext context, ClientModel client)
Definition: ClientRegistrationAuth.java:205
ClientRegistrationAuth auth
Definition: AbstractClientRegistrationProvider.java:47
boolean isRegistrationAccessToken()
Definition: ClientRegistrationAuth.java:122
KeycloakSession session
Definition: AbstractClientRegistrationProvider.java:45
RegistrationAuth getRegistrationAuth()
Definition: ClientRegistrationAuth.java:200

◆ updateClientRepWithProtocolMappers()

void org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider.updateClientRepWithProtocolMappers ( ClientModel  clientModel,
ClientRepresentation  rep 
)
inlineprivate
171  {
172  List<ProtocolMapperRepresentation> mappings = new LinkedList<>();
173  for (ProtocolMapperModel model : clientModel.getProtocolMappers()) {
174  mappings.add(ModelToRepresentation.toRepresentation(model));
175  }
176  rep.setProtocolMappers(mappings);
177  }

◆ updateOIDC()

Response org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider.updateOIDC ( @PathParam("clientId") String  clientId,
OIDCClientRepresentation  clientOIDC 
)
inline
112  {
113  try {
114  ClientRepresentation client = DescriptionConverter.toInternal(session, clientOIDC);
115  OIDCClientRegistrationContext oidcContext = new OIDCClientRegistrationContext(session, client, this, clientOIDC);
116  client = update(clientId, oidcContext);
117 
118  ClientModel clientModel = session.getContext().getRealm().getClientByClientId(client.getClientId());
119  updatePairwiseSubMappers(clientModel, SubjectType.parse(clientOIDC.getSubjectType()), clientOIDC.getSectorIdentifierUri());
120  updateClientRepWithProtocolMappers(clientModel, client);
121 
122  URI uri = session.getContext().getUri().getAbsolutePathBuilder().path(client.getClientId()).build();
123  clientOIDC = DescriptionConverter.toExternalResponse(session, client, uri);
124  return Response.ok(clientOIDC).build();
125  } catch (ClientRegistrationException cre) {
126  ServicesLogger.LOGGER.clientRegistrationException(cre.getMessage());
127  throw new ErrorResponseException(ErrorCodes.INVALID_CLIENT_METADATA, "Client metadata invalid", Response.Status.BAD_REQUEST);
128  }
129  }
void updateClientRepWithProtocolMappers(ClientModel clientModel, ClientRepresentation rep)
Definition: OIDCClientRegistrationProvider.java:171
KeycloakSession session
Definition: AbstractClientRegistrationProvider.java:45
void updatePairwiseSubMappers(ClientModel clientModel, SubjectType subjectType, String sectorIdentifierUri)
Definition: OIDCClientRegistrationProvider.java:137
ClientRepresentation update(String clientId, ClientRegistrationContext context)
Definition: AbstractClientRegistrationProvider.java:123

◆ updatePairwiseSubMappers()

void org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider.updatePairwiseSubMappers ( ClientModel  clientModel,
SubjectType  subjectType,
String  sectorIdentifierUri 
)
inlineprivate
137  {
138  if (subjectType == SubjectType.PAIRWISE) {
139 
140  // See if we have existing pairwise mapper and update it. Otherwise create new
141  AtomicBoolean foundPairwise = new AtomicBoolean(false);
142 
143  clientModel.getProtocolMappers().stream().filter((ProtocolMapperModel mapping) -> {
144  if (mapping.getProtocolMapper().endsWith(AbstractPairwiseSubMapper.PROVIDER_ID_SUFFIX)) {
145  foundPairwise.set(true);
146  return true;
147  } else {
148  return false;
149  }
150  }).forEach((ProtocolMapperModel mapping) -> {
151  PairwiseSubMapperHelper.setSectorIdentifierUri(mapping, sectorIdentifierUri);
152  clientModel.updateProtocolMapper(mapping);
153  });
154 
155  // We don't have existing pairwise mapper. So create new
156  if (!foundPairwise.get()) {
157  ProtocolMapperRepresentation newPairwise = SHA256PairwiseSubMapper.createPairwiseMapper(sectorIdentifierUri, null);
158  clientModel.addProtocolMapper(RepresentationToModel.toModel(newPairwise));
159  }
160 
161  } else {
162  // Rather find and remove all pairwise mappers
163  clientModel.getProtocolMappers().stream().filter((ProtocolMapperModel mapperRep) -> {
164  return mapperRep.getProtocolMapper().endsWith(AbstractPairwiseSubMapper.PROVIDER_ID_SUFFIX);
165  }).forEach((ProtocolMapperModel mapping) -> {
166  clientModel.getProtocolMappers().remove(mapping);
167  });
168  }
169  }

メンバ詳解

◆ auth

ClientRegistrationAuth org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.auth
protectedinherited

◆ event

EventBuilder org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.event
protectedinherited

◆ logger

final Logger org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProvider.logger = Logger.getLogger(OIDCClientRegistrationProvider.class)
staticprivate

◆ session

KeycloakSession org.keycloak.services.clientregistration.AbstractClientRegistrationProvider.session
protectedinherited

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