use of org.wso2.carbon.identity.oauth.listener.OAuthApplicationMgtListener in project identity-inbound-auth-oauth by wso2-extensions.
the class OAuthAdminServiceImpl method updateConsumerApplication.
/**
* Update existing consumer application.
*
* @param consumerAppDTO <code>OAuthConsumerAppDTO</code> with updated application information
* @throws IdentityOAuthAdminException Error when updating the underlying identity persistence store.
*/
public void updateConsumerApplication(OAuthConsumerAppDTO consumerAppDTO) throws IdentityOAuthAdminException {
for (OAuthApplicationMgtListener oAuthApplicationMgtListener : OAuthComponentServiceHolder.getInstance().getOAuthApplicationMgtListeners()) {
oAuthApplicationMgtListener.doPreUpdateConsumerApplication(consumerAppDTO);
}
String errorMessage = "Error while updating the app information.";
String oauthConsumerKey = consumerAppDTO.getOauthConsumerKey();
if (StringUtils.isEmpty(oauthConsumerKey) || StringUtils.isEmpty(consumerAppDTO.getOauthConsumerSecret())) {
errorMessage = "ConsumerKey or ConsumerSecret is not provided for updating the OAuth application.";
if (LOG.isDebugEnabled()) {
LOG.debug(errorMessage);
}
throw handleClientError(INVALID_REQUEST, errorMessage);
}
String loggedInUserName = CarbonContext.getThreadLocalCarbonContext().getUsername();
String tenantAwareLoggedInUserName = MultitenantUtils.getTenantAwareUsername(loggedInUserName);
String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
OAuthAppDAO dao = new OAuthAppDAO();
OAuthAppDO oauthappdo;
try {
oauthappdo = getOAuthApp(oauthConsumerKey);
if (oauthappdo == null) {
String msg = "OAuth application cannot be found for consumerKey: " + oauthConsumerKey;
if (LOG.isDebugEnabled()) {
LOG.debug(msg);
}
throw handleClientError(INVALID_OAUTH_CLIENT, msg);
}
if (!StringUtils.equals(consumerAppDTO.getOauthConsumerSecret(), oauthappdo.getOauthConsumerSecret())) {
errorMessage = "Invalid ConsumerSecret is provided for updating the OAuth application with " + "consumerKey: " + oauthConsumerKey;
if (LOG.isDebugEnabled()) {
LOG.debug(errorMessage);
}
throw handleClientError(INVALID_REQUEST, errorMessage);
}
} catch (InvalidOAuthClientException e) {
String msg = "Cannot find a valid OAuth client for consumerKey: " + oauthConsumerKey;
throw handleClientError(INVALID_OAUTH_CLIENT, msg, e);
} catch (IdentityOAuth2Exception e) {
throw handleError("Error while updating the app information.", e);
}
AuthenticatedUser defaultAppOwner = oauthappdo.getAppOwner();
AuthenticatedUser appOwner = getAppOwner(consumerAppDTO, defaultAppOwner);
oauthappdo.setAppOwner(appOwner);
oauthappdo.setOauthConsumerKey(oauthConsumerKey);
oauthappdo.setOauthConsumerSecret(consumerAppDTO.getOauthConsumerSecret());
validateCallbackURI(consumerAppDTO);
oauthappdo.setCallbackUrl(consumerAppDTO.getCallbackUrl());
oauthappdo.setApplicationName(consumerAppDTO.getApplicationName());
oauthappdo.setPkceMandatory(consumerAppDTO.getPkceMandatory());
oauthappdo.setPkceSupportPlain(consumerAppDTO.getPkceSupportPlain());
// Validate access token expiry configurations.
validateTokenExpiryConfigurations(consumerAppDTO);
oauthappdo.setUserAccessTokenExpiryTime(consumerAppDTO.getUserAccessTokenExpiryTime());
oauthappdo.setApplicationAccessTokenExpiryTime(consumerAppDTO.getApplicationAccessTokenExpiryTime());
oauthappdo.setRefreshTokenExpiryTime(consumerAppDTO.getRefreshTokenExpiryTime());
oauthappdo.setIdTokenExpiryTime(consumerAppDTO.getIdTokenExpiryTime());
oauthappdo.setTokenType(consumerAppDTO.getTokenType());
oauthappdo.setBypassClientCredentials(consumerAppDTO.isBypassClientCredentials());
if (OAuthConstants.OAuthVersions.VERSION_2.equals(consumerAppDTO.getOAuthVersion())) {
validateGrantTypes(consumerAppDTO);
oauthappdo.setGrantTypes(consumerAppDTO.getGrantTypes());
validateAudiences(consumerAppDTO);
oauthappdo.setAudiences(consumerAppDTO.getAudiences());
oauthappdo.setScopeValidators(filterScopeValidators(consumerAppDTO));
oauthappdo.setRequestObjectSignatureValidationEnabled(consumerAppDTO.isRequestObjectSignatureValidationEnabled());
// Validate IdToken Encryption configurations.
oauthappdo.setIdTokenEncryptionEnabled(consumerAppDTO.isIdTokenEncryptionEnabled());
if (consumerAppDTO.isIdTokenEncryptionEnabled()) {
oauthappdo.setIdTokenEncryptionAlgorithm(filterIdTokenEncryptionAlgorithm(consumerAppDTO));
oauthappdo.setIdTokenEncryptionMethod(filterIdTokenEncryptionMethod((consumerAppDTO)));
}
oauthappdo.setBackChannelLogoutUrl(consumerAppDTO.getBackChannelLogoutUrl());
oauthappdo.setFrontchannelLogoutUrl(consumerAppDTO.getFrontchannelLogoutUrl());
oauthappdo.setRenewRefreshTokenEnabled(consumerAppDTO.getRenewRefreshTokenEnabled());
validateBindingType(consumerAppDTO.getTokenBindingType());
oauthappdo.setTokenBindingType(consumerAppDTO.getTokenBindingType());
oauthappdo.setTokenRevocationWithIDPSessionTerminationEnabled(consumerAppDTO.isTokenRevocationWithIDPSessionTerminationEnabled());
oauthappdo.setTokenBindingValidationEnabled(consumerAppDTO.isTokenBindingValidationEnabled());
}
dao.updateConsumerApplication(oauthappdo);
AppInfoCache.getInstance().addToCache(oauthappdo.getOauthConsumerKey(), oauthappdo);
if (LOG.isDebugEnabled()) {
LOG.debug("Oauth Application update success : " + consumerAppDTO.getApplicationName() + " in " + "tenant domain: " + tenantDomain);
}
}
use of org.wso2.carbon.identity.oauth.listener.OAuthApplicationMgtListener in project identity-inbound-auth-oauth by wso2-extensions.
the class OAuth2ServiceComponent method activate.
protected void activate(ComponentContext context) {
try {
if (OAuth2ServiceComponentHolder.getInstance().getScopeClaimMappingDAO() == null) {
OAuth2ServiceComponentHolder.getInstance().setScopeClaimMappingDAO(new ScopeClaimMappingDAOImpl());
}
loadScopeConfigFile();
loadOauthScopeBinding();
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
boolean isRecordExist = OAuthTokenPersistenceFactory.getInstance().getScopeClaimMappingDAO().hasScopesPopulated(tenantId);
if (!isRecordExist) {
OAuth2Util.initiateOIDCScopes(tenantId);
}
TenantCreationEventListener scopeTenantMgtListener = new TenantCreationEventListener();
bundleContext = context.getBundleContext();
// Registering TenantCreationEventListener
ServiceRegistration scopeTenantMgtListenerSR = bundleContext.registerService(TenantMgtListener.class.getName(), scopeTenantMgtListener, null);
if (scopeTenantMgtListenerSR != null) {
if (log.isDebugEnabled()) {
log.debug(" TenantMgtListener is registered");
}
} else {
log.error("TenantMgtListener could not be registered");
}
// iniating oauth scopes
OAuth2Util.initiateOAuthScopePermissionsBindings(tenantId);
// exposing server configuration as a service
OAuthServerConfiguration oauthServerConfig = OAuthServerConfiguration.getInstance();
bundleContext.registerService(OAuthServerConfiguration.class.getName(), oauthServerConfig, null);
OAuth2TokenValidationService tokenValidationService = new OAuth2TokenValidationService();
bundleContext.registerService(OAuth2TokenValidationService.class.getName(), tokenValidationService, null);
OAuthClientAuthnService clientAuthnService = new OAuthClientAuthnService();
bundleContext.registerService(OAuthClientAuthnService.class.getName(), clientAuthnService, null);
BasicAuthClientAuthenticator basicAuthClientAuthenticator = new BasicAuthClientAuthenticator();
bundleContext.registerService(OAuthClientAuthenticator.class.getName(), basicAuthClientAuthenticator, null);
PublicClientAuthenticator publicClientAuthenticator = new PublicClientAuthenticator();
bundleContext.registerService(OAuthClientAuthenticator.class.getName(), publicClientAuthenticator, null);
// Register cookie based access token binder.
CookieBasedTokenBinder cookieBasedTokenBinder = new CookieBasedTokenBinder();
bundleContext.registerService(TokenBinderInfo.class.getName(), cookieBasedTokenBinder, null);
// SSO session based access token binder.
SSOSessionBasedTokenBinder ssoSessionBasedTokenBinder = new SSOSessionBasedTokenBinder();
bundleContext.registerService(TokenBinderInfo.class.getName(), ssoSessionBasedTokenBinder, null);
if (log.isDebugEnabled()) {
log.debug("Identity OAuth bundle is activated");
}
if (OAuth2ServiceComponentHolder.getKeyIDProvider() == null) {
KeyIDProvider defaultKeyIDProvider = new DefaultKeyIDProviderImpl();
OAuth2ServiceComponentHolder.setKeyIDProvider(defaultKeyIDProvider);
if (log.isDebugEnabled()) {
log.debug("Key ID Provider " + DefaultKeyIDProviderImpl.class.getSimpleName() + " registered as the default Key ID Provider implementation.");
}
}
ServiceRegistration tenantMgtListenerSR = bundleContext.registerService(TenantMgtListener.class.getName(), new OAuthTenantMgtListenerImpl(), null);
if (tenantMgtListenerSR != null) {
if (log.isDebugEnabled()) {
log.debug("OAuth - TenantMgtListener registered.");
}
} else {
log.error("OAuth - TenantMgtListener could not be registered.");
}
ServiceRegistration userStoreConfigEventSR = bundleContext.registerService(UserStoreConfigListener.class.getName(), new OAuthUserStoreConfigListenerImpl(), null);
if (userStoreConfigEventSR != null) {
if (log.isDebugEnabled()) {
log.debug("OAuth - UserStoreConfigListener registered.");
}
} else {
log.error("OAuth - UserStoreConfigListener could not be registered.");
}
ServiceRegistration oauthApplicationMgtListenerSR = bundleContext.registerService(ApplicationMgtListener.class.getName(), new OAuthApplicationMgtListener(), null);
if (oauthApplicationMgtListenerSR != null) {
if (log.isDebugEnabled()) {
log.debug("OAuth - ApplicationMgtListener registered.");
}
} else {
log.error("OAuth - ApplicationMgtListener could not be registered.");
}
// PKCE enabled by default.
OAuth2ServiceComponentHolder.setPkceEnabled(true);
// Register device auth service.
ServiceRegistration deviceAuthService = bundleContext.registerService(DeviceAuthService.class.getName(), new DeviceAuthServiceImpl(), null);
if (deviceAuthService != null) {
if (log.isDebugEnabled()) {
log.debug("DeviceAuthService registered.");
}
} else {
log.error("DeviceAuthService could not be registered.");
}
// Register the default OpenIDConnect claim filter
bundleContext.registerService(OpenIDConnectClaimFilter.class, new OpenIDConnectClaimFilterImpl(), null);
if (log.isDebugEnabled()) {
log.debug("Default OpenIDConnect Claim filter registered successfully.");
}
bundleContext.registerService(AbstractEventHandler.class.getName(), new TokenBindingExpiryEventHandler(), null);
if (log.isDebugEnabled()) {
log.debug("TokenBindingExpiryEventHandler is successfully registered.");
}
// Registering OAuth2Service as a OSGIService
bundleContext.registerService(OAuth2Service.class.getName(), new OAuth2Service(), null);
// Registering OAuth2ScopeService as a OSGIService
bundleContext.registerService(OAuth2ScopeService.class.getName(), new OAuth2ScopeService(), null);
// Note : DO NOT add any activation related code below this point,
// to make sure the server doesn't start up if any activation failures occur
} catch (Throwable e) {
String errMsg = "Error while activating OAuth2ServiceComponent.";
log.error(errMsg, e);
throw new RuntimeException(errMsg, e);
}
if (checkAudienceEnabled()) {
if (log.isDebugEnabled()) {
log.debug("OAuth - OIDC audiences enabled.");
}
OAuth2ServiceComponentHolder.setAudienceEnabled(true);
} else {
if (log.isDebugEnabled()) {
log.debug("OAuth - OIDC audiences disabled.");
}
OAuth2ServiceComponentHolder.setAudienceEnabled(false);
}
if (checkIDPIdColumnAvailable()) {
if (log.isDebugEnabled()) {
log.debug("IDP_ID column is available in all relevant tables. " + "Setting isIDPIdColumnEnabled to true.");
}
OAuth2ServiceComponentHolder.setIDPIdColumnEnabled(true);
} else {
if (log.isDebugEnabled()) {
log.debug("IDP_ID column is not available in all relevant tables. " + "Setting isIDPIdColumnEnabled to false.");
}
OAuth2ServiceComponentHolder.setIDPIdColumnEnabled(false);
}
}
use of org.wso2.carbon.identity.oauth.listener.OAuthApplicationMgtListener in project identity-inbound-auth-oauth by wso2-extensions.
the class OAuthAdminServiceImpl method removeOAuthApplicationData.
/**
* Removes an OAuth consumer application.
*
* @param consumerKey Consumer Key
* @throws IdentityOAuthAdminException Error when removing the consumer information from the database.
*/
public void removeOAuthApplicationData(String consumerKey) throws IdentityOAuthAdminException {
for (OAuthApplicationMgtListener oAuthApplicationMgtListener : OAuthComponentServiceHolder.getInstance().getOAuthApplicationMgtListeners()) {
oAuthApplicationMgtListener.doPreRemoveOAuthApplicationData(consumerKey);
}
OAuthAppDAO dao = new OAuthAppDAO();
try {
dao.removeConsumerApplication(consumerKey);
} catch (IdentityOAuthAdminException e) {
/*
* For more information read https://github.com/wso2/product-is/issues/12579. This is to overcome the
* above issue.
*/
LOG.error(String.format("Error occurred when trying to remove OAuth application date for the " + "application with consumer key: %s. Therefore retrying again.", consumerKey), e);
boolean isOperationFailed = true;
for (int attempt = 1; attempt <= MAX_RETRY_ATTEMPTS; attempt++) {
try {
Thread.sleep(1000);
dao.removeConsumerApplication(consumerKey);
isOperationFailed = false;
LOG.info(String.format("Oauth application data deleted for the application with consumer key: %s " + "during the retry attempt: %s", consumerKey, attempt));
break;
} catch (Exception exception) {
LOG.error(String.format("Retry attempt: %s failed to delete OAuth application data for " + "application with the consumer key: %s", attempt, consumerKey), exception);
}
}
if (isOperationFailed) {
throw new IdentityOAuthAdminException("Error occurred while deleting OAuth2 application " + "data for application with consumer key: " + consumerKey, e);
}
}
// Remove client credentials from cache.
OAuthCache.getInstance().clearCacheEntry(new OAuthCacheKey(consumerKey));
AppInfoCache.getInstance().clearCacheEntry(consumerKey);
if (LOG.isDebugEnabled()) {
LOG.debug("Client credentials are removed from the cache for OAuth App with consumerKey: " + consumerKey);
}
}
use of org.wso2.carbon.identity.oauth.listener.OAuthApplicationMgtListener in project identity-inbound-auth-oauth by wso2-extensions.
the class OAuthAdminServiceImpl method updateConsumerAppState.
/**
* @param consumerKey
* @param newState
* @throws IdentityOAuthAdminException
*/
public void updateConsumerAppState(String consumerKey, String newState) throws IdentityOAuthAdminException {
for (OAuthApplicationMgtListener oAuthApplicationMgtListener : OAuthComponentServiceHolder.getInstance().getOAuthApplicationMgtListeners()) {
oAuthApplicationMgtListener.doPreUpdateConsumerApplicationState(consumerKey, newState);
}
try {
OAuthAppDO oAuthAppDO = getOAuthApp(consumerKey);
// change the state
oAuthAppDO.setState(newState);
Properties properties = new Properties();
properties.setProperty(OAuthConstants.OAUTH_APP_NEW_STATE, newState);
properties.setProperty(OAuthConstants.ACTION_PROPERTY_KEY, OAuthConstants.ACTION_REVOKE);
AppInfoCache.getInstance().clearCacheEntry(consumerKey);
updateAppAndRevokeTokensAndAuthzCodes(consumerKey, properties);
if (LOG.isDebugEnabled()) {
LOG.debug("App state is updated to:" + newState + " in the AppInfoCache for OAuth App with " + "consumerKey: " + consumerKey);
}
} catch (InvalidOAuthClientException e) {
String msg = "Error while updating state of OAuth app with consumerKey: " + consumerKey;
throw handleClientError(INVALID_OAUTH_CLIENT, msg, e);
} catch (IdentityOAuth2Exception e) {
throw handleError("Error while updating state of OAuth app with consumerKey: " + consumerKey, e);
}
}
Aggregations