gluu
公開メンバ関数 | 限定公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration > クラステンプレート
org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration > の継承関係図
Inheritance graph
org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration > 連携図
Collaboration graph

公開メンバ関数

 OpenIdClient (final Configuration< C, L > configuration)
 
void init ()
 
String getName ()
 
String getRedirectionUrl (final WebContext context)
 
boolean isAuthorizationResponse (final WebContext context)
 
boolean isValidRequestState (final WebContext context)
 
final OpenIdCredentials getCredentials (final WebContext context)
 
UserProfile getUserProfile (final OpenIdCredentials credential, final WebContext context)
 
getAppConfiguration ()
 
OpenIdConfigurationResponse getOpenIdConfiguration ()
 

限定公開メンバ関数

void initInternal ()
 
CommonProfile retrieveUserProfileFromUserInfoResponse (final WebContext context, final UserInfoResponse userInfoResponse)
 
String getFirstClaim (final UserInfoResponse userInfoResponse, final String claimName)
 

非公開メンバ関数

void loadOpenIdConfiguration ()
 
void initClient ()
 
boolean isValidClient (final long now)
 
RegisterResponse registerOpenIdClient ()
 
String getAccessToken (final OpenIdCredentials credential)
 
UserInfoResponse getUserInfo (final String accessToken)
 

非公開変数類

final Logger logger = LoggerFactory.getLogger(OpenIdClient.class)
 
final ReentrantLock clientLock = new ReentrantLock()
 
appConfiguration
 
String clientId
 
String clientSecret
 
long clientExpiration
 
boolean preRegisteredClient
 
OpenIdConfigurationResponse openIdConfiguration
 
Configuration< C, L > configuration
 

静的非公開変数類

static final String STATE_PARAMETER = "#state_parameter"
 
static final String NONCE_PARAMETER = "#nonce_parameter"
 
static final long NEW_CLIENT_EXPIRATION_OVERLAP = 60 * 1000
 

詳解

This class is the oxAuth client to authenticate users and retrieve user profile

著者
Yuriy Movchan 11/02/2015

構築子と解体子

◆ OpenIdClient()

org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.OpenIdClient ( final Configuration< C, L >  configuration)
inline
76  {
79  }
C appConfiguration
Definition: OpenIdClient.java:64
C getAppConfiguration()
Definition: Configuration.java:226
Configuration< C, L > configuration
Definition: OpenIdClient.java:74

関数詳解

◆ getAccessToken()

String org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.getAccessToken ( final OpenIdCredentials  credential)
inlineprivate
276  {
277  // Request access token using the authorization code
278  logger.debug("Getting access token");
279 
280  final TokenClient tokenClient = new TokenClient(this.openIdConfiguration.getTokenEndpoint());
281 
282  final TokenResponse tokenResponse = tokenClient.execAuthorizationCode(credential.getAuthorizationCode(), this.appConfiguration.getOpenIdRedirectUrl(), this.clientId, this.clientSecret);
283  logger.trace("tokenResponse.getStatus(): '{}'", tokenResponse.getStatus());
284  logger.trace("tokenResponse.getErrorType(): '{}'", tokenResponse.getErrorType());
285 
286  final String accessToken = tokenResponse.getAccessToken();
287  logger.trace("accessToken : " + accessToken);
288 
289  return accessToken;
290  }
OpenIdConfigurationResponse openIdConfiguration
Definition: OpenIdClient.java:72
C appConfiguration
Definition: OpenIdClient.java:64
String getTokenEndpoint()
Definition: OpenIdConfigurationResponse.java:192
String clientSecret
Definition: OpenIdClient.java:67
String clientId
Definition: OpenIdClient.java:66
final Logger logger
Definition: OpenIdClient.java:54

◆ getAppConfiguration()

C org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.getAppConfiguration ( )
inline
355  {
356  return appConfiguration;
357  }
C appConfiguration
Definition: OpenIdClient.java:64

◆ getCredentials()

final OpenIdCredentials org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.getCredentials ( final WebContext  context)
inline

{}

246  {
247  final String authorizationCode = context.getRequestParameter(ResponseType.CODE.getValue());
248 
249  final OpenIdCredentials clientCredential = new OpenIdCredentials(authorizationCode);
250  clientCredential.setClientName(getName());
251  logger.debug("Client credential: '{}'", clientCredential);
252 
253  return clientCredential;
254  }
String getName()
Definition: OpenIdClient.java:178
final Logger logger
Definition: OpenIdClient.java:54

◆ getFirstClaim()

String org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.getFirstClaim ( final UserInfoResponse  userInfoResponse,
final String  claimName 
)
inlineprotected
345  {
346  final List<String> claims = userInfoResponse.getClaim(claimName);
347 
348  if ((claims == null) || claims.isEmpty()) {
349  return null;
350  }
351 
352  return claims.get(0);
353  }

◆ getName()

String org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.getName ( )
inline

{}

178  {
179  return this.getClass().getSimpleName();
180  }

◆ getOpenIdConfiguration()

359  {
360  return openIdConfiguration;
361  }
OpenIdConfigurationResponse openIdConfiguration
Definition: OpenIdClient.java:72

◆ getRedirectionUrl()

String org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.getRedirectionUrl ( final WebContext  context)
inline

{}

185  {
186  init();
187 
188  final String state = RandomStringUtils.randomAlphanumeric(10);
189  final String nonce = RandomStringUtils.randomAlphanumeric(10);
190 
191  final AuthorizationRequest authorizationRequest = new AuthorizationRequest(Arrays.asList(ResponseType.CODE), this.clientId, this.appConfiguration.getOpenIdScopes(),
192  this.appConfiguration.getOpenIdRedirectUrl(), null);
193 
194  authorizationRequest.setState(state);
195  authorizationRequest.setNonce(nonce);
196 
197  context.setSessionAttribute(getName() + STATE_PARAMETER, state);
198  context.setSessionAttribute(getName() + NONCE_PARAMETER, nonce);
199 
200  final String redirectionUrl = this.openIdConfiguration.getAuthorizationEndpoint() + "?" + authorizationRequest.getQueryString();
201  logger.debug("oxAuth redirection Url: '{}'", redirectionUrl);
202 
203  return redirectionUrl;
204  }
static final String NONCE_PARAMETER
Definition: OpenIdClient.java:57
void init()
Definition: OpenIdClient.java:82
static final String STATE_PARAMETER
Definition: OpenIdClient.java:56
OpenIdConfigurationResponse openIdConfiguration
Definition: OpenIdClient.java:72
String getName()
Definition: OpenIdClient.java:178
C appConfiguration
Definition: OpenIdClient.java:64
String getAuthorizationEndpoint()
Definition: OpenIdConfigurationResponse.java:174
String clientId
Definition: OpenIdClient.java:66
final Logger logger
Definition: OpenIdClient.java:54

◆ getUserInfo()

UserInfoResponse org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.getUserInfo ( final String  accessToken)
inlineprivate
292  {
293  logger.debug("Session validation successful. Getting user information");
294 
295  final UserInfoClient userInfoClient = new UserInfoClient(this.openIdConfiguration.getUserInfoEndpoint());
296  final UserInfoResponse userInfoResponse = userInfoClient.execUserInfo(accessToken);
297 
298  logger.trace("userInfoResponse.getStatus(): '{}'", userInfoResponse.getStatus());
299  logger.trace("userInfoResponse.getErrorType(): '{}'", userInfoResponse.getErrorType());
300  logger.debug("userInfoResponse.getClaims(): '{}'", userInfoResponse.getClaims());
301 
302  return userInfoResponse;
303  }
OpenIdConfigurationResponse openIdConfiguration
Definition: OpenIdClient.java:72
final Logger logger
Definition: OpenIdClient.java:54
String getUserInfoEndpoint()
Definition: OpenIdConfigurationResponse.java:210

◆ getUserProfile()

UserProfile org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.getUserProfile ( final OpenIdCredentials  credential,
final WebContext  context 
)
inline

{}

260  {
261  init();
262 
263  try {
264  final String accessToken = getAccessToken(credential);
265  final UserInfoResponse userInfoResponse = getUserInfo(accessToken);
266 
267  final UserProfile profile = retrieveUserProfileFromUserInfoResponse(context, userInfoResponse);
268  logger.debug("User profile: '{}'", profile);
269 
270  return profile;
271  } catch (final Exception ex) {
272  throw new CommunicationException(ex);
273  }
274  }
void init()
Definition: OpenIdClient.java:82
CommonProfile retrieveUserProfileFromUserInfoResponse(final WebContext context, final UserInfoResponse userInfoResponse)
Definition: OpenIdClient.java:305
String getAccessToken(final OpenIdCredentials credential)
Definition: OpenIdClient.java:276
UserInfoResponse getUserInfo(final String accessToken)
Definition: OpenIdClient.java:292
final Logger logger
Definition: OpenIdClient.java:54

◆ init()

void org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.init ( )
inline
82  {
83  super.init();
84  initClient();
85  }
void initClient()
Definition: OpenIdClient.java:122

◆ initClient()

void org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.initClient ( )
inlineprivate
122  {
123  if (this.preRegisteredClient) {
124  return;
125  }
126 
127  long now = System.currentTimeMillis();
128 
129  // Register new client if the previous one is missing or expired
130  if (!isValidClient(now)) {
131  clientLock.lock();
132  try {
133  now = System.currentTimeMillis();
134  if (!isValidClient(now)) {
135  RegisterResponse clientRegisterResponse = registerOpenIdClient();
136 
137  this.clientId = clientRegisterResponse.getClientId();
138  this.clientSecret = clientRegisterResponse.getClientSecret();
139  this.clientExpiration = clientRegisterResponse.getClientSecretExpiresAt().getTime();
140  }
141  } finally {
142  clientLock.unlock();
143  }
144  }
145  }
boolean preRegisteredClient
Definition: OpenIdClient.java:70
long clientExpiration
Definition: OpenIdClient.java:68
final ReentrantLock clientLock
Definition: OpenIdClient.java:62
boolean isValidClient(final long now)
Definition: OpenIdClient.java:147
RegisterResponse registerOpenIdClient()
Definition: OpenIdClient.java:155
String clientSecret
Definition: OpenIdClient.java:67
String clientId
Definition: OpenIdClient.java:66

◆ initInternal()

void org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.initInternal ( )
inlineprotected
87  {
88  this.clientId = appConfiguration.getOpenIdClientId();
89  this.clientSecret = appConfiguration.getOpenIdClientPassword();
90 
91  if (StringHelper.isNotEmpty(this.clientSecret)) {
92  try {
93  StringEncrypter stringEncrypter = StringEncrypter.instance(this.configuration.getCryptoConfigurationSalt());
94  this.clientSecret = stringEncrypter.decrypt(this.clientSecret);
95  } catch (EncryptionException ex) {
96  logger.warn("Assuming that client password is not encrypted!");
97  }
98  }
99 
100  this.preRegisteredClient = StringHelper.isNotEmpty(this.clientId) && StringHelper.isNotEmpty(this.clientSecret);
101 
103  }
boolean preRegisteredClient
Definition: OpenIdClient.java:70
C appConfiguration
Definition: OpenIdClient.java:64
String getCryptoConfigurationSalt()
Definition: Configuration.java:218
String clientSecret
Definition: OpenIdClient.java:67
String clientId
Definition: OpenIdClient.java:66
void loadOpenIdConfiguration()
Definition: OpenIdClient.java:105
final Logger logger
Definition: OpenIdClient.java:54
Configuration< C, L > configuration
Definition: OpenIdClient.java:74

◆ isAuthorizationResponse()

boolean org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.isAuthorizationResponse ( final WebContext  context)
inline

{}

210  {
211  final String authorizationCode = context.getRequestParameter(ResponseType.CODE.getValue());
212  logger.debug("oxAuth authorization code: '{}'", authorizationCode);
213 
214  final boolean result = StringHelper.isNotEmpty(authorizationCode);
215  logger.debug("Is authorization request: '{}'", result);
216 
217  return result;
218  }
final Logger logger
Definition: OpenIdClient.java:54

◆ isValidClient()

boolean org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.isValidClient ( final long  now)
inlineprivate
147  {
148  if (StringHelper.isEmpty(this.clientId) || StringHelper.isEmpty(this.clientSecret) || (this.clientExpiration - NEW_CLIENT_EXPIRATION_OVERLAP <= now)) {
149  return false;
150  }
151 
152  return true;
153  }
long clientExpiration
Definition: OpenIdClient.java:68
static final long NEW_CLIENT_EXPIRATION_OVERLAP
Definition: OpenIdClient.java:60
String clientSecret
Definition: OpenIdClient.java:67

◆ isValidRequestState()

boolean org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.isValidRequestState ( final WebContext  context)
inline

{}

224  {
225  final String state = context.getRequestParameter("state");
226  logger.debug("oxAuth request state: '{}'", state);
227 
228  final Object sessionState = context.getSessionAttribute(getName() + STATE_PARAMETER);
229  logger.debug("Session context state: '{}'", sessionState);
230 
231  final boolean emptySessionState = StringHelper.isEmptyString(sessionState);
232  if (emptySessionState) {
233  return false;
234  }
235 
236  final boolean result = StringHelper.equals(state, (String) sessionState);
237  logger.debug("Is valid state: '{}'", result);
238 
239  return result;
240  }
static final String STATE_PARAMETER
Definition: OpenIdClient.java:56
String getName()
Definition: OpenIdClient.java:178
final Logger logger
Definition: OpenIdClient.java:54

◆ loadOpenIdConfiguration()

void org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.loadOpenIdConfiguration ( )
inlineprivate
105  {
106  String openIdProvider = appConfiguration.getOpenIdProviderUrl();
107  if (StringHelper.isEmpty(openIdProvider)) {
108  throw new ConfigurationException("OpenIdProvider Url is invalid");
109  }
110 
111  final OpenIdConfigurationClient openIdConfigurationClient = new OpenIdConfigurationClient(openIdProvider);
112  final OpenIdConfigurationResponse response = openIdConfigurationClient.execOpenIdConfiguration();
113  if ((response == null) || (response.getStatus() != 200)) {
114  throw new ConfigurationException("Failed to load oxAuth configuration");
115  }
116 
117  logger.info("Successfully loaded oxAuth configuration");
118 
119  this.openIdConfiguration = response;
120  }
OpenIdConfigurationResponse openIdConfiguration
Definition: OpenIdClient.java:72
C appConfiguration
Definition: OpenIdClient.java:64
final Logger logger
Definition: OpenIdClient.java:54

◆ registerOpenIdClient()

RegisterResponse org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.registerOpenIdClient ( )
inlineprivate
155  {
156  logger.info("Registering OpenId client");
157 
158  String clientName = this.appConfiguration.getApplicationName() + " client";
159  RegisterRequest registerRequest = new RegisterRequest(ApplicationType.WEB, clientName, Arrays.asList(this.appConfiguration.getOpenIdRedirectUrl()));
160  registerRequest.setRequestObjectSigningAlg(SignatureAlgorithm.RS256);
161  registerRequest.setTokenEndpointAuthMethod(AuthenticationMethod.CLIENT_SECRET_BASIC);
162 
163  RegisterClient registerClient = new RegisterClient(openIdConfiguration.getRegistrationEndpoint());
164  registerClient.setRequest(registerRequest);
165  RegisterResponse response = registerClient.exec();
166 
167  if ((response == null) || (response.getStatus() != 200)) {
168  throw new ConfigurationException("Failed to register new client");
169  }
170 
171  return response;
172  }
String getRegistrationEndpoint()
Definition: OpenIdConfigurationResponse.java:310
OpenIdConfigurationResponse openIdConfiguration
Definition: OpenIdClient.java:72
C appConfiguration
Definition: OpenIdClient.java:64
final Logger logger
Definition: OpenIdClient.java:54

◆ retrieveUserProfileFromUserInfoResponse()

CommonProfile org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.retrieveUserProfileFromUserInfoResponse ( final WebContext  context,
final UserInfoResponse  userInfoResponse 
)
inlineprotected
305  {
306  final CommonProfile profile = new CommonProfile();
307 
308  String nonceResponse = getFirstClaim(userInfoResponse, JwtClaimName.NONCE);
309  final String nonceSession = (String) context.getSessionAttribute(getName() + NONCE_PARAMETER);
310  logger.debug("Session nonce: '{}'", nonceSession);
311  if (!StringHelper.equals(nonceSession, nonceResponse)) {
312  logger.error("User info response: nonce is not matching.");
313  throw new CommunicationException("Nonce is not match");
314  }
315 
316  String id = getFirstClaim(userInfoResponse, JwtClaimName.USER_NAME);
317  if (StringHelper.isEmpty(id)) {
318  id = getFirstClaim(userInfoResponse, JwtClaimName.SUBJECT_IDENTIFIER);
319  }
320  profile.setId(id);
321 
322  List<ClaimToAttributeMapping> claimMappings = this.appConfiguration.getOpenIdClaimMapping();
323  if ((claimMappings == null) || (claimMappings.size() == 0)) {
324  logger.info("Using default claims to attributes mapping");
325  profile.setUserName(id);
326  profile.setEmail(getFirstClaim(userInfoResponse, JwtClaimName.EMAIL));
327 
328  profile.setDisplayName(getFirstClaim(userInfoResponse, JwtClaimName.NAME));
329  profile.setFirstName(getFirstClaim(userInfoResponse, JwtClaimName.GIVEN_NAME));
330  profile.setFamilyName(getFirstClaim(userInfoResponse, JwtClaimName.FAMILY_NAME));
331  profile.setZone(getFirstClaim(userInfoResponse, JwtClaimName.ZONEINFO));
332  profile.setLocale(getFirstClaim(userInfoResponse, JwtClaimName.LOCALE));
333  } else {
334  for (ClaimToAttributeMapping mapping : claimMappings) {
335  String attribute = mapping.getAttribute();
336  String value = getFirstClaim(userInfoResponse, mapping.getClaim());
337  profile.addAttribute(attribute, value);
338  logger.trace("Adding attribute '{}' with value '{}'", attribute, value);
339  }
340  }
341 
342  return profile;
343  }
String getFirstClaim(final UserInfoResponse userInfoResponse, final String claimName)
Definition: OpenIdClient.java:345
static final String NONCE_PARAMETER
Definition: OpenIdClient.java:57
String getName()
Definition: OpenIdClient.java:178
C appConfiguration
Definition: OpenIdClient.java:64
final Logger logger
Definition: OpenIdClient.java:54

メンバ詳解

◆ appConfiguration

C org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.appConfiguration
private

◆ clientExpiration

long org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.clientExpiration
private

◆ clientId

String org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.clientId
private

◆ clientLock

final ReentrantLock org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.clientLock = new ReentrantLock()
private

◆ clientSecret

String org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.clientSecret
private

◆ configuration

Configuration<C, L> org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.configuration
private

◆ logger

final Logger org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.logger = LoggerFactory.getLogger(OpenIdClient.class)
private

◆ NEW_CLIENT_EXPIRATION_OVERLAP

final long org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.NEW_CLIENT_EXPIRATION_OVERLAP = 60 * 1000
staticprivate

◆ NONCE_PARAMETER

final String org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.NONCE_PARAMETER = "#nonce_parameter"
staticprivate

◆ openIdConfiguration

◆ preRegisteredClient

boolean org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.preRegisteredClient
private

◆ STATE_PARAMETER

final String org.gluu.oxauth.client.OpenIdClient< C extends AppConfiguration, L extends LdapAppConfiguration >.STATE_PARAMETER = "#state_parameter"
staticprivate

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