Java源码示例:org.gluu.util.StringHelper

示例1
public String getSAML2URI(GluuAttribute attribute) {
	if (StringHelper.isNotEmpty(attribute.getSaml2Uri())) {
		return "SAML1 URI: " + attribute.getSaml2Uri();
	}
	List<String> attributeNames = new ArrayList<String>();
	attributeNames.add(attribute.getName());
	SchemaEntry schemaEntry = shemaService.getSchema();
	List<AttributeTypeDefinition> attributeTypes = shemaService.getAttributeTypeDefinitions(schemaEntry,
			attributeNames);
	String attributeName = attribute.getName();
	AttributeTypeDefinition attributeTypeDefinition = shemaService.getAttributeTypeDefinition(attributeTypes,
			attributeName);
	if (attributeTypeDefinition == null) {
		log.error("Failed to get OID for attribute name {}", attributeName);
		return null;
	}
	return "SAML2 URI: urn:oid:" + attributeTypeDefinition.getOID();
}
 
示例2
public List<DeviceRegistration> findDeviceRegistrationsByKeyHandle(String appId, String keyHandle, String ... returnAttributes) {
	if (org.gluu.util.StringHelper.isEmpty(appId) || StringHelper.isEmpty(keyHandle)) {
		return new ArrayList<DeviceRegistration>(0);
	}

	byte[] keyHandleDecoded = Base64Util.base64urldecode(keyHandle);

	String baseDn = userService.getDnForUser(null);

	Filter deviceObjectClassFilter = Filter.createEqualityFilter("objectClass", "oxDeviceRegistration");
	Filter deviceHashCodeFilter = Filter.createEqualityFilter("oxDeviceHashCode", getKeyHandleHashCode(keyHandleDecoded));
	Filter deviceKeyHandleFilter = Filter.createEqualityFilter("oxDeviceKeyHandle", keyHandle);
	Filter appIdFilter = Filter.createEqualityFilter("oxApplication", appId);

	Filter filter = Filter.createANDFilter(deviceObjectClassFilter, deviceHashCodeFilter, appIdFilter, deviceKeyHandleFilter);

	return ldapEntryManager.findEntries(baseDn, DeviceRegistration.class, filter, returnAttributes);
}
 
示例3
public String getUserInumByKeyHandle(String appId, String keyHandle) throws InvalidKeyHandleDeviceException {
    if (org.gluu.util.StringHelper.isEmpty(appId) || StringHelper.isEmpty(keyHandle)) {
        return null;
    }

    List<DeviceRegistration> deviceRegistrations = deviceRegistrationService.findDeviceRegistrationsByKeyHandle(appId, keyHandle, "oxId");
    if (deviceRegistrations.isEmpty()) {
        throw new InvalidKeyHandleDeviceException(String.format("Failed to find device by keyHandle '%s' in LDAP", keyHandle));
    }

    if (deviceRegistrations.size() != 1) {
        throw new BadInputException(String.format("There are '%d' devices with keyHandle '%s' in LDAP", deviceRegistrations.size(), keyHandle));
    }

    DeviceRegistration deviceRegistration = deviceRegistrations.get(0);

    return userService.getUserInumByDn(deviceRegistration.getDn());
}
 
示例4
public void addCustomAttribute(String inum, boolean mandatory) {
	if (StringHelper.isEmpty(inum)) {
		return;
	}

	GluuAttribute tmpAttribute = attributeInums.get(inum);
	if ((tmpAttribute == null) || containsCustomAttribute(tmpAttribute)) {
		return;
	}

	String id = this.attributeIds.get(tmpAttribute);
	this.availableAttributeIds.remove(id);

	GluuCustomAttribute tmpGluuPersonAttribute = new GluuCustomAttribute(tmpAttribute.getName(), (String) null,
			true, mandatory);
	tmpGluuPersonAttribute.setMetadata(tmpAttribute);

	this.customAttributes.add(tmpGluuPersonAttribute);
}
 
示例5
private void loadOpenIdConfiguration() throws IOException {
	String openIdProvider = appConfiguration.getOpenIdProviderUrl();
	if (StringHelper.isEmpty(openIdProvider)) {
		throw new ConfigurationException("OpenIdProvider Url is invalid");
	}

	final OpenIdConfigurationClient openIdConfigurationClient = new OpenIdConfigurationClient(openIdProvider);
	final OpenIdConfigurationResponse response = openIdConfigurationClient.execOpenIdConfiguration();
	if ((response == null) || (response.getStatus() != 200)) {
		throw new ConfigurationException("Failed to load oxAuth configuration");
	}

	logger.info("Successfully loaded oxAuth configuration");

	this.openIdConfiguration = response;
}
 
示例6
/**
 * Search scopes by pattern
 * 
 * @param pattern
 *            Pattern
 * @param sizeLimit
 *            Maximum count of results
 * @return List of scopes
 * @throws Exception
 */
public List<Scope> searchScopes(String pattern, int sizeLimit) {
	Filter searchFilter = null;
	if (StringHelper.isNotEmpty(pattern)) {
		String[] targetArray = new String[] { pattern };
		Filter displayNameFilter = Filter.createSubstringFilter(OxTrustConstants.displayName, null, targetArray,
				null);
		Filter descriptionFilter = Filter.createSubstringFilter(OxTrustConstants.description, null, targetArray,
				null);
		searchFilter = Filter.createORFilter(displayNameFilter, descriptionFilter);
	}
	List<Scope> result = new ArrayList<>();
	try {
		result = persistenceEntryManager.findEntries(getDnForScope(null), Scope.class, searchFilter, sizeLimit);
		return filter(result);
	} catch (Exception e) {
		e.printStackTrace();
	}
	return result;
}
 
示例7
private void initAttribute() {
	if (StringHelper.isEmpty(this.attribute.getSaml1Uri())) {
		String namespace;
		if (attribute.isCustom() || StringHelper.isEmpty(attribute.getUrn())
				&& attribute.getUrn().startsWith("urn:gluu:dir:attribute-def:")) {
			namespace = "gluu";
		} else {
			namespace = "mace";
		}
		this.attribute.setSaml1Uri(String.format("urn:%s:dir:attribute-def:%s", namespace, attribute.getName()));
	}

	if (StringHelper.isEmpty(this.attribute.getSaml2Uri())) {
		this.attribute.setSaml2Uri(attributeService.getDefaultSaml2Uri(attribute.getName()));
	}

	if (attribute.getAttributeValidation() == null) {
		attribute.setAttributeValidation(new AttributeValidation());
	} else {
		this.validationToggle = true;
	}

	if (attribute.getGluuTooltip() != null) {
		this.tooltipToggle = true;
	}
}
 
示例8
public String[] buildOrganizationCustomMessages(String[][] customMessages) {
	List<String> result = new ArrayList<String>();

	for (String[] customMessage : customMessages) {
		if (ArrayHelper.isEmpty(customMessage) || customMessage.length != 2) {
			continue;
		}
		String msgKey = customMessage[0];
		String msgValue = customMessage[1];

		if (StringHelper.isNotEmpty(msgKey) && StringHelper.isNotEmpty(msgValue)) {
			result.add(msgKey + ": " + msgValue);
		}
	}

	return result.toArray(new String[0]);
}
 
示例9
private void loadOpenIdConfiguration() throws IOException {
    String openIdProvider = appConfiguration.getOxAuthIssuer();
    if (StringHelper.isEmpty(openIdProvider)) {
        throw new ConfigurationException("OpenIdProvider Url is invalid");
    }

    openIdProvider = openIdProvider + "/.well-known/openid-configuration";

    final OpenIdConfigurationClient openIdConfigurationClient = new OpenIdConfigurationClient(openIdProvider);
    final OpenIdConfigurationResponse response = openIdConfigurationClient.execOpenIdConfiguration();
    if ((response == null) || (response.getStatus() != 200)) {
        throw new ConfigurationException("Failed to load oxAuth configuration");
    }

    log.info("Successfully loaded oxAuth configuration");

    this.openIdConfiguration = response;
}
 
示例10
public User getUser(String userId, String... returnAttributes) {
	log.debug("Getting user information from LDAP: userId = {}", userId);

	if (StringHelper.isEmpty(userId)) {
		return null;
	}

	Filter userUidFilter = Filter.createEqualityFilter(Filter.createLowercaseFilter("uid"), StringHelper.toLowerCase(userId));

	List<User> entries = persistenceEntryManager.findEntries(getPeopleBaseDn(), User.class, userUidFilter, returnAttributes);
	log.debug("Found {} entries for user id = {}", entries.size(), userId);

	if (entries.size() > 0) {
		return entries.get(0);
	} else {
		return null;
	}
}
 
示例11
public String search() {
	if (StringHelper.isNotEmpty(this.oldSearchPattern) && Util.equals(this.oldSearchPattern, this.searchPattern)) {
		return OxTrustConstants.RESULT_SUCCESS;
	}
	try {
	    if (StringHelper.isEmpty(this.searchPattern)) {
            this.attributes = attributeService.getAllAttributes();
	    } else {
	        this.attributes = attributeService.searchAttributes(this.searchPattern, OxTrustConstants.searchPersonsSizeLimit);
	    }
           for (GluuAttribute selectedAttribute : selectedAttributes) {
               if (!attributes.contains(selectedAttribute)) {
                   attributes.add(selectedAttribute);
               }
           }
		this.oldSearchPattern = this.searchPattern;
	} catch (Exception ex) {
		log.error("Failed to find attributes", ex);
		return OxTrustConstants.RESULT_FAILURE;
	}

	return OxTrustConstants.RESULT_SUCCESS;
}
 
示例12
public boolean generateSp() throws IOException {
	FacesContext facesContext = FacesContext.getCurrentInstance();
	try {
		this.trustRelationship.setInum(trustService.generateInumForNewTrustRelationship());
		String cert = getCertForGeneratedSP();
		String spMetadataFileName = this.trustRelationship.getSpMetaDataFN();
		if (StringHelper.isEmpty(spMetadataFileName)) {
			spMetadataFileName = shibboleth3ConfService.getSpNewMetadataFileName(trustRelationship);
			trustRelationship.setSpMetaDataFN(spMetadataFileName);
		}
		String spMetadataFileContent = shibboleth3ConfService.generateSpMetadataFileContent(trustRelationship,
				cert);
		HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
		response.setContentType("application/xml");
		response.setHeader("Content-Disposition", "attachment;filename=" + spMetadataFileName);
		ServletOutputStream os = response.getOutputStream();
		os.write(spMetadataFileContent.getBytes());
		os.flush();
		os.close();
		facesContext.responseComplete();
	} catch (IOException e) {
		e.printStackTrace();
	}
	facesContext.responseComplete();
	return true;
}
 
示例13
private Pair<SessionId, AuthorizationGrant> getPair(String idTokenHint, String sessionId, HttpServletRequest httpRequest) {
    AuthorizationGrant authorizationGrant = authorizationGrantList.getAuthorizationGrantByIdToken(idTokenHint);
    if (authorizationGrant == null) {
        Boolean endSessionWithAccessToken = appConfiguration.getEndSessionWithAccessToken();
        if ((endSessionWithAccessToken != null) && endSessionWithAccessToken) {
            authorizationGrant = authorizationGrantList.getAuthorizationGrantByAccessToken(idTokenHint);
        }
    }

    SessionId ldapSessionId = null;

    try {
        String id = sessionId;
        if (StringHelper.isEmpty(id)) {
            id = cookieService.getSessionIdFromCookie(httpRequest);
        }
        if (StringHelper.isNotEmpty(id)) {
            ldapSessionId = sessionIdService.getSessionId(id);
        }
    } catch (Exception e) {
        log.error("Failed to current session id.", e);
    }
    return new Pair<>(ldapSessionId, authorizationGrant);
}
 
示例14
public User getUserByAttribute(String attributeName, String attributeValue) {
    log.debug("Getting user information from LDAP: attributeName = '{}', attributeValue = '{}'", attributeName, attributeValue);
    
    if (StringHelper.isEmpty(attributeName) || StringHelper.isEmpty(attributeValue)) {
    	return null;
    }

    User user = new User();
    user.setDn(getPeopleBaseDn());

    List<CustomAttribute> customAttributes =  new ArrayList<CustomAttribute>();
    customAttributes.add(new CustomAttribute(attributeName, attributeValue));

    user.setCustomAttributes(customAttributes);

    List<User> entries = persistenceEntryManager.findEntries(user, 1);
    log.debug("Found '{}' entries", entries.size());

    if (entries.size() > 0) {
        return entries.get(0);
    } else {
        return null;
    }
}
 
示例15
@PreDestroy
  public void sessionDestroyed() {
  	OauthData oauthData = identity.getOauthData();
  	if ((oauthData == null) || StringHelper.isEmpty(oauthData.getSessionState())) {
  		return;
  	}

  	String userUid = oauthData.getUserUid();
  	log.debug("Calling oxAuth logout method at the end of HTTP session. User: '{}'", userUid);
  	try {
          String endSessionState = UUID.randomUUID().toString();

          EndSessionRequest endSessionRequest = new EndSessionRequest(oauthData.getIdToken(), appConfiguration.getLogoutRedirectUrl(), endSessionState);
          endSessionRequest.setSessionId(oauthData.getSessionState());

          EndSessionClient endSessionClient = new EndSessionClient(openIdService.getOpenIdConfiguration().getEndSessionEndpoint());
          endSessionClient.setRequest(endSessionRequest);
          EndSessionResponse endSessionResponse = endSessionClient.exec();
 
          if ((endSessionResponse == null) || (endSessionResponse.getStatus() != 302)) {
  	    	log.error("Invalid response code at oxAuth logout. User: '{}'", userUid);
          }
} catch (Exception ex) {
   	log.error("Exception happened at oxAuth logout. User: '{}'", userUid, ex);
}
  }
 
示例16
private boolean initActions() {
	initAttributes(this.trustRelationship);
	String resultInitContacts = trustContactsAction.initContacts(this.trustRelationship);
	if (!StringHelper.equalsIgnoreCase(OxTrustConstants.RESULT_SUCCESS, resultInitContacts)) {
		return false;
	}
	String resultInitMetadataFilters = metadataFiltersAction.initMetadataFilters(this.trustRelationship);
	if (!StringHelper.equalsIgnoreCase(OxTrustConstants.RESULT_SUCCESS, resultInitMetadataFilters)) {
		return false;
	}
	String resultInitProfileConfigurations = relyingPartyAction.initProfileConfigurations();
	if (!StringHelper.equalsIgnoreCase(OxTrustConstants.RESULT_SUCCESS, resultInitProfileConfigurations)) {
		return false;
	}
	String resultInitFederationDeconstructions = federationDeconstructionAction
			.initFederationDeconstructions(this.trustRelationship);
	if (!StringHelper.equalsIgnoreCase(OxTrustConstants.RESULT_SUCCESS, resultInitFederationDeconstructions)) {
		return false;
	}
	initFederatedSites(this.trustRelationship);
	return true;
}
 
示例17
public User getAuthenticatedUser() {
	if (identity.getUser() != null) {
		return identity.getUser();
	} else {
		SessionId sessionId = sessionIdService.getSessionId();
		if (sessionId != null) {
			Map<String, String> sessionIdAttributes = sessionId.getSessionAttributes();
			String userId = sessionIdAttributes.get(Constants.AUTHENTICATED_USER);
			if (StringHelper.isNotEmpty(userId)) {
				User user = userService.getUser(userId);
				identity.setUser(user);

				return user;
			}
		}
	}

	return null;
}
 
示例18
private AuthorizationGrant validateAuthorization(String authorization, UmaScopeType umaScopeType) {
    log.trace("Validate authorization: {}", authorization);
    if (StringHelper.isEmpty(authorization)) {
        throw errorResponseFactory.createWebApplicationException(UNAUTHORIZED, UNAUTHORIZED_CLIENT, "Authorization header is blank.");
    }

    String token = tokenService.getToken(authorization);
    if (StringHelper.isEmpty(token)) {
        log.debug("Token is invalid.");
        throw errorResponseFactory.createWebApplicationException(UNAUTHORIZED, UNAUTHORIZED_CLIENT, "Token is invalid.");
    }

    AuthorizationGrant authorizationGrant = authorizationGrantList.getAuthorizationGrantByAccessToken(token);
    if (authorizationGrant == null) {
        throw errorResponseFactory.createWebApplicationException(UNAUTHORIZED, ACCESS_DENIED, "Unable to find authorization grant by token.");
    }

    Set<String> scopes = authorizationGrant.getScopes();
    if (!scopes.contains(umaScopeType.getValue())) {
        throw errorResponseFactory.createWebApplicationException(Response.Status.NOT_ACCEPTABLE, INVALID_CLIENT_SCOPE, "Client does not have scope: " + umaScopeType.getValue());
    }
    return authorizationGrant;
}
 
示例19
@Produces
@ApplicationScoped
public StringEncrypter getStringEncrypter() throws OxIntializationException {
	String encodeSalt = configurationFactory.getCryptoConfigurationSalt();

	if (StringHelper.isEmpty(encodeSalt)) {
		throw new OxIntializationException("Encode salt isn't defined");
	}

	try {
		StringEncrypter stringEncrypter = StringEncrypter.instance(encodeSalt);

		return stringEncrypter;
	} catch (EncryptionException ex) {
		throw new OxIntializationException("Failed to create StringEncrypter instance");
	}
}
 
示例20
private GluuAttribute createAttributeFromConfig(String prefix) {
	String attributeName = importConfiguration.getString(prefix + ATTRIBUTE_LDAP_NAME_SUFFIX, null);
	String displayName = importConfiguration.getString(prefix + ATTRIBUTE_DISPLAY_NAME_SUFFIX, null);
	String dataType = importConfiguration.getString(prefix + ATTRIBUTE_DATA_TYPE_SUFFIX, null);
	boolean required = importConfiguration.getBoolean(prefix + ATTRIBUTE_DATA_REQUIRED_SUFFIX, false);

	if (StringHelper.isNotEmpty(attributeName) && StringHelper.isNotEmpty(displayName) && StringHelper.isNotEmpty(dataType)) {
		AttributeDataType attributeDataType = AttributeDataType.getByValue(dataType);
		if (attributeDataType != null) {
			GluuAttribute attr = new GluuAttribute();
			attr.setName(attributeName);
			attr.setDisplayName(displayName);
			attr.setDataType(attributeDataType);
			attr.setRequred(required);

			return attr;
		}
	}

	return null;
}
 
示例21
private GluuAttribute createAttributeFromConfig(ImportPerson importPerson) {
	String attributeName = importPerson.getLdapName();
	String displayName = importPerson.getDisplayName();
	String dataType = importPerson.getDataType();
	boolean required = importPerson.getRequired();

	if (StringHelper.isNotEmpty(attributeName) && StringHelper.isNotEmpty(displayName) && StringHelper.isNotEmpty(dataType)) {
		AttributeDataType attributeDataType = AttributeDataType.getByValue(dataType);
		if (attributeDataType != null) {
			GluuAttribute attr = new GluuAttribute();
			attr.setName(attributeName);
			attr.setDisplayName(displayName);
			attr.setDataType(attributeDataType);
			attr.setRequred(required);

			return attr;
		}
	}

	return null;
}
 
示例22
public void initTimer() {
	log.info("Initializing Cache Refresh Timer");
	this.isActive = new AtomicBoolean(false);

	// Clean up previous Inum cache
	CacheRefreshConfiguration cacheRefreshConfiguration = configurationFactory.getCacheRefreshConfiguration();
	if (cacheRefreshConfiguration != null) {
		String snapshotFolder = cacheRefreshConfiguration.getSnapshotFolder();
		if (StringHelper.isNotEmpty(snapshotFolder)) {
			String inumCachePath = getInumCachePath(cacheRefreshConfiguration);
			objectSerializationService.cleanup(inumCachePath);
		}
	}

	// Schedule to start cache refresh every 1 minute
	timerEvent.fire(new TimerEvent(new TimerSchedule(DEFAULT_INTERVAL, DEFAULT_INTERVAL), new CacheRefreshEvent(),
			Scheduled.Literal.INSTANCE));

	this.lastFinishedTime = System.currentTimeMillis();
}
 
示例23
public boolean verifyGoogleRecaptchaFromServletContext(String secretKey) {
	HttpServletRequest httpServletRequest = (HttpServletRequest) externalContext.getRequest();
	String gRecaptchaResponse = httpServletRequest.getParameter("g-recaptcha-response");
	if (StringHelper.isNotEmpty(gRecaptchaResponse)) {
		return verifyGoogleRecaptcha(gRecaptchaResponse, secretKey);
	}

	return false;
}
 
示例24
private void updateLoginURIs() {
    if (this.loginUris == null || this.loginUris.size() == 0) {
        this.client.setOxAuthRedirectURIs(null);
        return;
    }
    List<String> tmpUris = new ArrayList<String>();
    for (String uri : this.loginUris) {
        tmpUris.add(StringHelper.trimAll(uri));
    }
    this.client.setOxAuthRedirectURIs(tmpUris);
}
 
示例25
protected CommonProfile retrieveUserProfileFromUserInfoResponse(final WebContext context, final Jwt jwt, final UserInfoResponse userInfoResponse) {
	final CommonProfile profile = new CommonProfile();

	String nonceResponse = (String) jwt.getClaims().getClaim(JwtClaimName.NONCE);
       final String nonceSession = (String) context.getSessionAttribute(getName() + SESSION_NONCE_PARAMETER);
       logger.debug("Session nonce: '{}'", nonceSession);
       if (!StringHelper.equals(nonceSession, nonceResponse)) {
           logger.error("User info response:  nonce is not matching.");
           throw new CommunicationException("Nonce is not match" + nonceResponse + " : " + nonceSession);
       }

	String id = getFirstClaim(userInfoResponse, JwtClaimName.USER_NAME);
	if (StringHelper.isEmpty(id)) {
		id = getFirstClaim(userInfoResponse, JwtClaimName.SUBJECT_IDENTIFIER);
	}
	profile.setId(id);

	List<ClaimToAttributeMapping> claimMappings = this.appConfiguration.getOpenIdClaimMapping();
	if ((claimMappings == null) || (claimMappings.size() == 0)) {
		logger.info("Using default claims to attributes mapping");
		profile.setUserName(id);
		profile.setEmail(getFirstClaim(userInfoResponse, JwtClaimName.EMAIL));

		profile.setDisplayName(getFirstClaim(userInfoResponse, JwtClaimName.NAME));
		profile.setFirstName(getFirstClaim(userInfoResponse, JwtClaimName.GIVEN_NAME));
		profile.setFamilyName(getFirstClaim(userInfoResponse, JwtClaimName.FAMILY_NAME));
		profile.setZone(getFirstClaim(userInfoResponse, JwtClaimName.ZONEINFO));
		profile.setLocale(getFirstClaim(userInfoResponse, JwtClaimName.LOCALE));
	} else {
		for (ClaimToAttributeMapping mapping : claimMappings) {
			String attribute = mapping.getAttribute();
			String value = getFirstClaim(userInfoResponse, mapping.getClaim());
			profile.addAttribute(attribute, value);
			logger.trace("Adding attribute '{}' with value '{}'", attribute, value);
		}
	}

	return profile;
}
 
示例26
public String[] getAttributes(String attributeName) {
	if (StringHelper.isEmpty(attributeName)) {
		return null;
	}

	String[] values = null;
	for (GluuCustomAttribute attribute : getCustomAttributes()) {
		if (StringHelper.equalsIgnoreCase(attribute.getName(), attributeName)) {
			values = attribute.getValues();
			break;
		}
	}
	return values;
}
 
示例27
public static String escapeString(String value) {
	if (StringHelper.isEmpty(value)) {
		return "";
	}

	return escapeComma(StringEscapeUtils.escapeJava(value));
}
 
示例28
private void updateClientLogoutURIs() {
    if (this.clientlogoutUris == null || this.clientlogoutUris.size() == 0) {
        this.client.setLogoutUri(null);
        return;
    }
    List<String> tmpUris = new ArrayList<String>();
    for (String uri : this.clientlogoutUris) {
        tmpUris.add(StringHelper.trimAll(uri));
    }
    this.client.setLogoutUri(tmpUris);
}
 
示例29
public String getDnForOneStepU2fDevice(String deviceRegistrationId) {
	final String u2fBaseDn = staticConfiguration.getBaseDn().getU2fBase(); // ou=registered_devices,ou=u2f,o=gluu
	if (StringHelper.isEmpty(deviceRegistrationId)) {
		return String.format("ou=registered_devices,%s", u2fBaseDn);
	}

	return String.format("oxid=%s,ou=registered_devices,%s", deviceRegistrationId, u2fBaseDn);
}
 
示例30
public String getUmaConfigurationEndpoint() {
	String umaIssuer = appConfiguration.getUmaIssuer();
	if (StringHelper.isEmpty(umaIssuer)) {
		log.trace("oxAuth UMA issuer isn't specified");
		return null;
	}

	String umaConfigurationEndpoint = umaIssuer;
	if (!umaConfigurationEndpoint.endsWith("uma2-configuration")) {
		umaConfigurationEndpoint += "/.well-known/uma2-configuration";
	}

	return umaConfigurationEndpoint;
}