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

公開メンバ関数

 DockerAuthV2Protocol ()
 
 DockerAuthV2Protocol (final KeycloakSession session, final RealmModel realm, final UriInfo uriInfo, final HttpHeaders headers, final EventBuilder event)
 
LoginProtocol setSession (final KeycloakSession session)
 
LoginProtocol setRealm (final RealmModel realm)
 
LoginProtocol setUriInfo (final UriInfo uriInfo)
 
LoginProtocol setHttpHeaders (final HttpHeaders headers)
 
LoginProtocol setEventBuilder (final EventBuilder event)
 
Response authenticated (final UserSessionModel userSession, final ClientSessionContext clientSessionCtx)
 
Response sendError (final AuthenticationSessionModel clientSession, final LoginProtocol.Error error)
 
void backchannelLogout (final UserSessionModel userSession, final AuthenticatedClientSessionModel clientSession)
 
Response frontchannelLogout (final UserSessionModel userSession, final AuthenticatedClientSessionModel clientSession)
 
Response finishLogout (final UserSessionModel userSession)
 
boolean requireReauthentication (final UserSessionModel userSession, final AuthenticationSessionModel clientSession)
 
void close ()
 

静的公開変数類

static final String LOGIN_PROTOCOL = "docker-v2"
 
static final String ACCOUNT_PARAM = "account"
 
static final String SERVICE_PARAM = "service"
 
static final String SCOPE_PARAM = "scope"
 
static final String ISSUER = "docker.iss"
 
static final String ISO_8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"
 

静的限定公開変数類

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

非公開メンバ関数

Response errorResponse (final UserSessionModel userSession, final String methodName)
 

非公開変数類

KeycloakSession session
 
RealmModel realm
 
UriInfo uriInfo
 
HttpHeaders headers
 
EventBuilder event
 

詳解

構築子と解体子

◆ DockerAuthV2Protocol() [1/2]

org.keycloak.protocol.docker.DockerAuthV2Protocol.DockerAuthV2Protocol ( )
inline
51  {
52  }

◆ DockerAuthV2Protocol() [2/2]

org.keycloak.protocol.docker.DockerAuthV2Protocol.DockerAuthV2Protocol ( final KeycloakSession  session,
final RealmModel  realm,
final UriInfo  uriInfo,
final HttpHeaders  headers,
final EventBuilder  event 
)
inline
54  {
55  this.session = session;
56  this.realm = realm;
57  this.uriInfo = uriInfo;
58  this.headers = headers;
59  this.event = event;
60  }
UriInfo uriInfo
Definition: DockerAuthV2Protocol.java:47
KeycloakSession session
Definition: DockerAuthV2Protocol.java:45
HttpHeaders headers
Definition: DockerAuthV2Protocol.java:48
EventBuilder event
Definition: DockerAuthV2Protocol.java:49
RealmModel realm
Definition: DockerAuthV2Protocol.java:46

関数詳解

◆ authenticated()

Response org.keycloak.protocol.docker.DockerAuthV2Protocol.authenticated ( final UserSessionModel  userSession,
final ClientSessionContext  clientSessionCtx 
)
inline
93  {
94  // First, create a base response token with realm + user values populated
95  final AuthenticatedClientSessionModel clientSession = clientSessionCtx.getClientSession();
96  final ClientModel client = clientSession.getClient();
97 
98  DockerResponseToken responseToken = new DockerResponseToken()
99  .id(KeycloakModelUtils.generateId())
100  .type(TokenUtil.TOKEN_TYPE_BEARER)
101  .issuer(clientSession.getNote(DockerAuthV2Protocol.ISSUER))
102  .subject(userSession.getUser().getUsername())
103  .issuedNow()
104  .audience(client.getClientId())
105  .issuedFor(client.getClientId());
106 
107  // since realm access token is given in seconds
108  final int accessTokenLifespan = realm.getAccessTokenLifespan();
109  responseToken.notBefore(responseToken.getIssuedAt())
110  .expiration(responseToken.getIssuedAt() + accessTokenLifespan);
111 
112  // Next, allow mappers to decorate the token to add/remove scopes as appropriate
113  final Set<ProtocolMapperModel> mappings = clientSessionCtx.getProtocolMappers();
114  for (final ProtocolMapperModel mapping : mappings) {
115  final ProtocolMapper mapper = (ProtocolMapper) session.getKeycloakSessionFactory().getProviderFactory(ProtocolMapper.class, mapping.getProtocolMapper());
116  if (mapper instanceof DockerAuthV2AttributeMapper) {
117  final DockerAuthV2AttributeMapper dockerAttributeMapper = (DockerAuthV2AttributeMapper) mapper;
118  if (dockerAttributeMapper.appliesTo(responseToken)) {
119  responseToken = dockerAttributeMapper.transformDockerResponseToken(responseToken, mapping, session, userSession, clientSession);
120  }
121  }
122  }
123 
124  try {
125  // Finally, construct the response to the docker client with the token + metadata
126  if (event.getEvent() != null && EventType.LOGIN.equals(event.getEvent().getType())) {
127  final KeyManager.ActiveRsaKey activeKey = session.keys().getActiveRsaKey(realm);
128  final String encodedToken = new JWSBuilder()
129  .kid(new DockerKeyIdentifier(activeKey.getPublicKey()).toString())
130  .type("JWT")
131  .jsonContent(responseToken)
132  .rsa256(activeKey.getPrivateKey());
133  final String expiresInIso8601String = new SimpleDateFormat(ISO_8601_DATE_FORMAT).format(new Date(responseToken.getIssuedAt() * 1000L));
134 
135  final DockerResponse responseEntity = new DockerResponse()
136  .setToken(encodedToken)
137  .setExpires_in(accessTokenLifespan)
138  .setIssued_at(expiresInIso8601String);
139  return new ResponseBuilderImpl().status(Response.Status.OK).header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).entity(responseEntity).build();
140  } else {
141  logger.errorv("Unable to handle request for event type {0}. Currently only LOGIN event types are supported by docker protocol.", event.getEvent() == null ? "null" : event.getEvent().getType());
142  throw new ErrorResponseException("invalid_request", "Event type not supported", Response.Status.BAD_REQUEST);
143  }
144  } catch (final InstantiationException e) {
145  logger.errorv("Error attempting to create Key ID for Docker JOSE header: ", e.getMessage());
146  throw new ErrorResponseException("token_error", "Unable to construct JOSE header for JWT", Response.Status.INTERNAL_SERVER_ERROR);
147  }
148 
149  }
static final String ISO_8601_DATE_FORMAT
Definition: DockerAuthV2Protocol.java:43
KeycloakSession session
Definition: DockerAuthV2Protocol.java:45
DockerAuthV2Protocol()
Definition: DockerAuthV2Protocol.java:51
EventBuilder event
Definition: DockerAuthV2Protocol.java:49
static final Logger logger
Definition: DockerAuthV2Protocol.java:36
RealmModel realm
Definition: DockerAuthV2Protocol.java:46

◆ backchannelLogout()

void org.keycloak.protocol.docker.DockerAuthV2Protocol.backchannelLogout ( final UserSessionModel  userSession,
final AuthenticatedClientSessionModel  clientSession 
)
inline
157  {
158  errorResponse(userSession, "backchannelLogout");
159 
160  }
Response errorResponse(final UserSessionModel userSession, final String methodName)
Definition: DockerAuthV2Protocol.java:177

◆ close()

void org.keycloak.protocol.docker.DockerAuthV2Protocol.close ( )
inline
183  {
184  // no-op
185  }

◆ errorResponse()

Response org.keycloak.protocol.docker.DockerAuthV2Protocol.errorResponse ( final UserSessionModel  userSession,
final String  methodName 
)
inlineprivate
177  {
178  logger.errorv("User {0} attempted to invoke unsupported method {1} on docker protocol.", userSession.getUser().getUsername(), methodName);
179  throw new ErrorResponseException("invalid_request", String.format("Attempted to invoke unsupported docker method %s", methodName), Response.Status.BAD_REQUEST);
180  }
static final Logger logger
Definition: DockerAuthV2Protocol.java:36

◆ finishLogout()

Response org.keycloak.protocol.docker.DockerAuthV2Protocol.finishLogout ( final UserSessionModel  userSession)
inline
168  {
169  return errorResponse(userSession, "finishLogout");
170  }
Response errorResponse(final UserSessionModel userSession, final String methodName)
Definition: DockerAuthV2Protocol.java:177

◆ frontchannelLogout()

Response org.keycloak.protocol.docker.DockerAuthV2Protocol.frontchannelLogout ( final UserSessionModel  userSession,
final AuthenticatedClientSessionModel  clientSession 
)
inline
163  {
164  return errorResponse(userSession, "frontchannelLogout");
165  }
Response errorResponse(final UserSessionModel userSession, final String methodName)
Definition: DockerAuthV2Protocol.java:177

◆ requireReauthentication()

boolean org.keycloak.protocol.docker.DockerAuthV2Protocol.requireReauthentication ( final UserSessionModel  userSession,
final AuthenticationSessionModel  clientSession 
)
inline
173  {
174  return true;
175  }

◆ sendError()

Response org.keycloak.protocol.docker.DockerAuthV2Protocol.sendError ( final AuthenticationSessionModel  clientSession,
final LoginProtocol.Error  error 
)
inline
152  {
153  return new ResponseBuilderImpl().status(Response.Status.INTERNAL_SERVER_ERROR).build();
154  }

◆ setEventBuilder()

LoginProtocol org.keycloak.protocol.docker.DockerAuthV2Protocol.setEventBuilder ( final EventBuilder  event)
inline
87  {
88  this.event = event;
89  return this;
90  }
EventBuilder event
Definition: DockerAuthV2Protocol.java:49

◆ setHttpHeaders()

LoginProtocol org.keycloak.protocol.docker.DockerAuthV2Protocol.setHttpHeaders ( final HttpHeaders  headers)
inline
81  {
82  this.headers = headers;
83  return this;
84  }
HttpHeaders headers
Definition: DockerAuthV2Protocol.java:48

◆ setRealm()

LoginProtocol org.keycloak.protocol.docker.DockerAuthV2Protocol.setRealm ( final RealmModel  realm)
inline
69  {
70  this.realm = realm;
71  return this;
72  }
RealmModel realm
Definition: DockerAuthV2Protocol.java:46

◆ setSession()

LoginProtocol org.keycloak.protocol.docker.DockerAuthV2Protocol.setSession ( final KeycloakSession  session)
inline
63  {
64  this.session = session;
65  return this;
66  }
KeycloakSession session
Definition: DockerAuthV2Protocol.java:45

◆ setUriInfo()

LoginProtocol org.keycloak.protocol.docker.DockerAuthV2Protocol.setUriInfo ( final UriInfo  uriInfo)
inline
75  {
76  this.uriInfo = uriInfo;
77  return this;
78  }
UriInfo uriInfo
Definition: DockerAuthV2Protocol.java:47

メンバ詳解

◆ ACCOUNT_PARAM

final String org.keycloak.protocol.docker.DockerAuthV2Protocol.ACCOUNT_PARAM = "account"
static

◆ event

EventBuilder org.keycloak.protocol.docker.DockerAuthV2Protocol.event
private

◆ headers

HttpHeaders org.keycloak.protocol.docker.DockerAuthV2Protocol.headers
private

◆ ISO_8601_DATE_FORMAT

final String org.keycloak.protocol.docker.DockerAuthV2Protocol.ISO_8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"
static

◆ ISSUER

final String org.keycloak.protocol.docker.DockerAuthV2Protocol.ISSUER = "docker.iss"
static

◆ logger

final Logger org.keycloak.protocol.docker.DockerAuthV2Protocol.logger = Logger.getLogger(DockerEndpoint.class)
staticprotected

◆ LOGIN_PROTOCOL

final String org.keycloak.protocol.docker.DockerAuthV2Protocol.LOGIN_PROTOCOL = "docker-v2"
static

◆ realm

RealmModel org.keycloak.protocol.docker.DockerAuthV2Protocol.realm
private

◆ SCOPE_PARAM

final String org.keycloak.protocol.docker.DockerAuthV2Protocol.SCOPE_PARAM = "scope"
static

◆ SERVICE_PARAM

final String org.keycloak.protocol.docker.DockerAuthV2Protocol.SERVICE_PARAM = "service"
static

◆ session

KeycloakSession org.keycloak.protocol.docker.DockerAuthV2Protocol.session
private

◆ uriInfo

UriInfo org.keycloak.protocol.docker.DockerAuthV2Protocol.uriInfo
private

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