From e9e98317831dd38779d882a8af0dc5a2dcf54ae2 Mon Sep 17 00:00:00 2001 From: sachinisiriwardene Date: Wed, 25 Oct 2023 14:52:01 +0530 Subject: [PATCH 1/2] add model changes for application management --- ...uestObjectSignatureValidationTestCase.java | 14 ++- .../management/v1/model/ApplicationModel.java | 26 +++- .../v1/model/ApplicationPatchModel.java | 24 +++- .../v1/model/ApplicationResponseModel.java | 23 +++- .../ClientAuthenticationConfiguration.java | 119 ++++++++++++++++++ .../v1/model/IdTokenConfiguration.java | 31 ++++- .../management/v1/model/OIDCMetaData.java | 50 +++++++- .../v1/model/OpenIDConnectConfiguration.java | 113 ++++++++++++++--- ...PushAuthorizationRequestConfiguration.java | 71 +++++++++++ .../v1/model/RequestObjectConfiguration.java | 114 +++++++++++++++++ 10 files changed, 557 insertions(+), 28 deletions(-) create mode 100644 modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ClientAuthenticationConfiguration.java create mode 100644 modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/PushAuthorizationRequestConfiguration.java create mode 100644 modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/RequestObjectConfiguration.java diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/oauth2/OAuth2RequestObjectSignatureValidationTestCase.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/oauth2/OAuth2RequestObjectSignatureValidationTestCase.java index ddb2b5679e..7469c33b00 100644 --- a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/oauth2/OAuth2RequestObjectSignatureValidationTestCase.java +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/oauth2/OAuth2RequestObjectSignatureValidationTestCase.java @@ -148,7 +148,6 @@ public void sendAuthorizationGrantRequestWithPlainJWTRequestObject() throws Exce EntityUtils.consume(response.getEntity()); } } - @Test(groups = "wso2.is", description = "Check enabling option to enforce request object signature validation", dependsOnMethods = "sendAuthorizationGrantRequestWithPlainJWTRequestObject") public void testEnforceRequestObjectSignatureValidation() throws Exception { @@ -198,6 +197,19 @@ public void sendUnSuccessfulAuthorizationGrantRequestWithSignedRequestObjectWith EntityUtils.consume(response.getEntity()); } } + @Test(groups = "wso2.is", description = "Check whether request object is signed with registered signing algorithm") + public void sendInvalidSigningAlgorithmForRequestObject() throws Exception { + + oidcInboundConfig.getRequestObject().setRequestObjectSigningAlg("PS256"); + updateApplicationInboundConfig(application.getId(), oidcInboundConfig, OIDC); + + try (CloseableHttpClient client = getRedirectDisabledClient()) { + String signedRequestObject = buildSignedJWT(consumerKey, sp1PrivateKey); + HttpResponse response = sendGetRequest(client, getAuthzRequestUrl(consumerKey, CALLBACK_URL, signedRequestObject)); + assertForErrorPage(response); + EntityUtils.consume(response.getEntity()); + } + } private void assertForLoginPage(HttpResponse response) { diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationModel.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationModel.java index 45235acc79..0c53b8a706 100644 --- a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationModel.java +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationModel.java @@ -34,6 +34,7 @@ public class ApplicationModel { private String imageUrl; private String loginUrl; private Boolean isManagementApp; + private Boolean isFapiApplication = false; private ClaimConfiguration claimConfiguration; private InboundProtocols inboundProtocolConfiguration; private AuthenticationSequence authenticationSequence; @@ -240,6 +241,24 @@ public void setProvisioningConfigurations(ProvisioningConfiguration provisioning this.provisioningConfigurations = provisioningConfigurations; } + /** + **/ + public ApplicationModel isFapiApplication(Boolean isFapiApplication) { + + this.isFapiApplication = isFapiApplication; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("isFapiApplication") + @Valid + public Boolean getIsFapiApplication() { + return isFapiApplication; + } + public void setIsFapiApplication(Boolean isFapiApplication) { + this.isFapiApplication = isFapiApplication; + } + @Override @@ -258,6 +277,7 @@ public boolean equals(Object o) { Objects.equals(this.imageUrl, applicationModel.imageUrl) && Objects.equals(this.loginUrl, applicationModel.loginUrl) && Objects.equals(this.isManagementApp, applicationModel.isManagementApp) && + Objects.equals(this.isFapiApplication, applicationModel.isFapiApplication) && Objects.equals(this.claimConfiguration, applicationModel.claimConfiguration) && Objects.equals(this.inboundProtocolConfiguration, applicationModel.inboundProtocolConfiguration) && Objects.equals(this.authenticationSequence, applicationModel.authenticationSequence) && @@ -267,8 +287,9 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(id, name, description, imageUrl, loginUrl, isManagementApp, claimConfiguration, - inboundProtocolConfiguration, authenticationSequence, advancedConfigurations, provisioningConfigurations); + return Objects.hash(id, name, description, imageUrl, isManagementApp, isFapiApplication, claimConfiguration, + inboundProtocolConfiguration, authenticationSequence, advancedConfigurations, + provisioningConfigurations); } @Override @@ -283,6 +304,7 @@ public String toString() { sb.append(" imageUrl: ").append(toIndentedString(imageUrl)).append("\n"); sb.append(" loginUrl: ").append(toIndentedString(loginUrl)).append("\n"); sb.append(" isManagementApp: ").append(toIndentedString(isManagementApp)).append("\n"); + sb.append(" isFapiApplication: ").append(toIndentedString(isFapiApplication)).append("\n"); sb.append(" claimConfiguration: ").append(toIndentedString(claimConfiguration)).append("\n"); sb.append(" inboundProtocolConfiguration: ").append(toIndentedString(inboundProtocolConfiguration)).append("\n"); sb.append(" authenticationSequence: ").append(toIndentedString(authenticationSequence)).append("\n"); diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationPatchModel.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationPatchModel.java index 958f09faa6..f7c589cfb3 100644 --- a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationPatchModel.java +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationPatchModel.java @@ -33,6 +33,8 @@ public class ApplicationPatchModel { private String imageUrl; private String accessUrl; private String templateId; + private Boolean isFapiApplication; + private ClaimConfiguration claimConfiguration; private AuthenticationSequence authenticationSequence; private AdvancedApplicationConfiguration advancedConfigurations; @@ -202,6 +204,24 @@ public void setProvisioningConfigurations(ProvisioningConfiguration provisioning this.provisioningConfigurations = provisioningConfigurations; } + /** + **/ + public ApplicationPatchModel isFapiApplication(Boolean isFapiApplication) { + + this.isFapiApplication = isFapiApplication; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("isFapiApplication") + @Valid + public Boolean getIsFapiApplication() { + return isFapiApplication; + } + public void setIsFapiApplication(Boolean isFapiApplication) { + this.isFapiApplication = isFapiApplication; + } + @Override @@ -219,6 +239,7 @@ public boolean equals(Object o) { Objects.equals(this.imageUrl, applicationPatchModel.imageUrl) && Objects.equals(this.accessUrl, applicationPatchModel.accessUrl) && Objects.equals(this.templateId, applicationPatchModel.templateId) && + Objects.equals(this.isFapiApplication, applicationPatchModel.isFapiApplication) && Objects.equals(this.claimConfiguration, applicationPatchModel.claimConfiguration) && Objects.equals(this.authenticationSequence, applicationPatchModel.authenticationSequence) && Objects.equals(this.advancedConfigurations, applicationPatchModel.advancedConfigurations) && @@ -227,7 +248,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(name, description, imageUrl, accessUrl, templateId, claimConfiguration, authenticationSequence, advancedConfigurations, provisioningConfigurations); + return Objects.hash(name, description, imageUrl, accessUrl, templateId, isFapiApplication, claimConfiguration, authenticationSequence, advancedConfigurations, provisioningConfigurations); } @Override @@ -241,6 +262,7 @@ public String toString() { sb.append(" imageUrl: ").append(toIndentedString(imageUrl)).append("\n"); sb.append(" accessUrl: ").append(toIndentedString(accessUrl)).append("\n"); sb.append(" templateId: ").append(toIndentedString(templateId)).append("\n"); + sb.append(" isFapiApplication: ").append(toIndentedString(isFapiApplication)).append("\n"); sb.append(" claimConfiguration: ").append(toIndentedString(claimConfiguration)).append("\n"); sb.append(" authenticationSequence: ").append(toIndentedString(authenticationSequence)).append("\n"); sb.append(" advancedConfigurations: ").append(toIndentedString(advancedConfigurations)).append("\n"); diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationResponseModel.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationResponseModel.java index ea7862fe14..f2493d4d1f 100644 --- a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationResponseModel.java +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ApplicationResponseModel.java @@ -39,6 +39,8 @@ public class ApplicationResponseModel { private String issuer; private String templateId; private Boolean isManagementApp; + private Boolean isFapiApplication; + private ClaimConfiguration claimConfiguration; private List inboundProtocols = null; private AuthenticationSequence authenticationSequence; @@ -354,6 +356,24 @@ public void setProvisioningConfigurations(ProvisioningConfiguration provisioning this.provisioningConfigurations = provisioningConfigurations; } + /** + **/ + public ApplicationResponseModel isFapiApplication(Boolean isFapiApplication) { + + this.isFapiApplication = isFapiApplication; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("isFapiApplication") + @Valid + public Boolean getIsFapiApplication() { + return isFapiApplication; + } + public void setIsFapiApplication(Boolean isFapiApplication) { + this.isFapiApplication = isFapiApplication; + } + /** **/ public ApplicationResponseModel access(ApplicationResponseModel.AccessEnum access) { @@ -393,6 +413,7 @@ public boolean equals(Object o) { Objects.equals(this.issuer, applicationResponseModel.issuer) && Objects.equals(this.templateId, applicationResponseModel.templateId) && Objects.equals(this.isManagementApp, applicationResponseModel.isManagementApp) && + Objects.equals(this.isFapiApplication, applicationResponseModel.isFapiApplication) && Objects.equals(this.claimConfiguration, applicationResponseModel.claimConfiguration) && Objects.equals(this.inboundProtocols, applicationResponseModel.inboundProtocols) && Objects.equals(this.authenticationSequence, applicationResponseModel.authenticationSequence) && @@ -404,7 +425,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(id, name, description, imageUrl, accessUrl, clientId, issuer, templateId, isManagementApp, claimConfiguration, inboundProtocols, authenticationSequence, appRoleConfigurations, advancedConfigurations, provisioningConfigurations, access); + return Objects.hash(id, name, description, imageUrl, accessUrl, clientId, issuer, templateId, isManagementApp, isFapiApplication, claimConfiguration, inboundProtocols, authenticationSequence, appRoleConfigurations, advancedConfigurations, provisioningConfigurations, access); } @Override diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ClientAuthenticationConfiguration.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ClientAuthenticationConfiguration.java new file mode 100644 index 0000000000..a79813fa3f --- /dev/null +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/ClientAuthenticationConfiguration.java @@ -0,0 +1,119 @@ +package org.wso2.identity.integration.test.rest.api.server.application.management.v1.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.Valid; +import java.util.Objects; + +public class ClientAuthenticationConfiguration { + + private String tokenEndpointAuthMethod; + private String tokenEndpointAuthSigningAlg; + private String tlsClientAuthSubjectDn; + + /** + * + **/ + public ClientAuthenticationConfiguration tokenEndpointAuthMethod(String tokenEndpointAuthMethod) { + + this.tokenEndpointAuthMethod = tokenEndpointAuthMethod; + return this; + } + + @ApiModelProperty(example = "true", value = "") + @JsonProperty("tokenEndpointAuthMethod") + @Valid + public String getTokenEndpointAuthMethod() { + return tokenEndpointAuthMethod; + } + + public void setTokenEndpointAuthMethod(String tokenEndpointAuthMethod) { + this.tokenEndpointAuthMethod = tokenEndpointAuthMethod; + } + + /** + * + **/ + public ClientAuthenticationConfiguration tokenEndpointAuthSigningAlg(String tokenEndpointAuthSigningAlg) { + + this.tokenEndpointAuthSigningAlg = tokenEndpointAuthSigningAlg; + return this; + } + + @ApiModelProperty(example = "PS256", value = "") + @JsonProperty("tokenEndpointAuthSigningAlg") + @Valid + public String getTokenEndpointAuthSigningAlg() { + return tokenEndpointAuthSigningAlg; + } + + public void setTokenEndpointAuthSigningAlg(String tokenEndpointAuthSigningAlg) { + this.tokenEndpointAuthSigningAlg = tokenEndpointAuthSigningAlg; + } + + /** + * + **/ + public ClientAuthenticationConfiguration tlsClientAuthSubjectDn(String tlsClientAuthSubjectDn) { + + this.tlsClientAuthSubjectDn = tlsClientAuthSubjectDn; + return this; + } + + @ApiModelProperty(example = "CN=John Doe,OU=OrgUnit,O=Organization,L=Colombo,ST=Western,C=LK", value = "") + @JsonProperty("tlsClientAuthSubjectDn") + @Valid + public String getTlsClientAuthSubjectDn() { + return tlsClientAuthSubjectDn; + } + + public void setTlsClientAuthSubjectDn(String tlsClientAuthSubjectDn) { + this.tlsClientAuthSubjectDn = tlsClientAuthSubjectDn; + } + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ClientAuthenticationConfiguration clientAuthenticationConfiguration = (ClientAuthenticationConfiguration) o; + return Objects.equals(this.tokenEndpointAuthMethod, clientAuthenticationConfiguration.tokenEndpointAuthMethod) && + Objects.equals(this.tokenEndpointAuthSigningAlg, clientAuthenticationConfiguration.tokenEndpointAuthSigningAlg) && + Objects.equals(this.tlsClientAuthSubjectDn, clientAuthenticationConfiguration.tlsClientAuthSubjectDn); + } + + @Override + public int hashCode() { + return Objects.hash(tokenEndpointAuthMethod, tokenEndpointAuthSigningAlg, tlsClientAuthSubjectDn); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class ClientAuthenticationConfiguration {\n"); + + sb.append(" tokenEndpointAuthMethod: ").append(toIndentedString(tokenEndpointAuthMethod)).append("\n"); + sb.append(" tokenEndpointAuthSigningAlg: ").append(toIndentedString(tokenEndpointAuthSigningAlg)).append("\n"); + sb.append(" tlsClientAuthSubjectDn: ").append(toIndentedString(tlsClientAuthSubjectDn)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n"); + } +} diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/IdTokenConfiguration.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/IdTokenConfiguration.java index 3053a53a95..25c0bf048f 100644 --- a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/IdTokenConfiguration.java +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/IdTokenConfiguration.java @@ -28,6 +28,8 @@ public class IdTokenConfiguration { private Long expiryInSeconds; private List audience = null; + private String idTokenSignedResponseAlg; + private IdTokenEncryptionConfiguration encryption; @@ -75,7 +77,26 @@ public IdTokenConfiguration addAudienceItem(String audienceItem) { return this; } - /** + /** + **/ + public IdTokenConfiguration idTokenSignedResponseAlg(String idTokenSignedResponseAlg) { + + this.idTokenSignedResponseAlg = idTokenSignedResponseAlg; + return this; + } + + @ApiModelProperty(example = "PS256", value = "") + @JsonProperty("idTokenSignedResponseAlg") + @Valid + public String getIdTokenSignedResponseAlg() { + return idTokenSignedResponseAlg; + } + public void setIdTokenSignedResponseAlg(String idTokenSignedResponseAlg) { + this.idTokenSignedResponseAlg = idTokenSignedResponseAlg; + } + + + /** **/ public IdTokenConfiguration encryption(IdTokenEncryptionConfiguration encryption) { @@ -106,13 +127,14 @@ public boolean equals(Object o) { } IdTokenConfiguration idTokenConfiguration = (IdTokenConfiguration) o; return Objects.equals(this.expiryInSeconds, idTokenConfiguration.expiryInSeconds) && - Objects.equals(this.audience, idTokenConfiguration.audience) && - Objects.equals(this.encryption, idTokenConfiguration.encryption); + Objects.equals(this.audience, idTokenConfiguration.audience) && + Objects.equals(this.idTokenSignedResponseAlg, idTokenConfiguration.idTokenSignedResponseAlg) && + Objects.equals(this.encryption, idTokenConfiguration.encryption); } @Override public int hashCode() { - return Objects.hash(expiryInSeconds, audience, encryption); + return Objects.hash(expiryInSeconds, audience,idTokenSignedResponseAlg, encryption); } @Override @@ -124,6 +146,7 @@ public String toString() { sb.append(" expiryInSeconds: ").append(toIndentedString(expiryInSeconds)).append("\n"); sb.append(" audience: ").append(toIndentedString(audience)).append("\n"); sb.append(" encryption: ").append(toIndentedString(encryption)).append("\n"); + sb.append(" idTokenSignedResponseAlg: ").append(toIndentedString(idTokenSignedResponseAlg)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/OIDCMetaData.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/OIDCMetaData.java index 8c3bf08de9..d66b752def 100644 --- a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/OIDCMetaData.java +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/OIDCMetaData.java @@ -34,6 +34,8 @@ public class OIDCMetaData { private MetadataProperty scopeValidators; private MetadataProperty accessTokenType; private MetadataProperty accessTokenBindingType; + private MetadataProperty tokenEndpointAuthMethod; + private MetadataProperty tokenEndpointSignatureAlgorithm; /** **/ @@ -215,6 +217,42 @@ public void setAccessTokenBindingType(MetadataProperty accessTokenBindingType) { this.accessTokenBindingType = accessTokenBindingType; } + /** + **/ + public OIDCMetaData tokenEndpointAuthMethod(MetadataProperty tokenEndpointAuthMethod) { + + this.tokenEndpointAuthMethod = tokenEndpointAuthMethod; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("tokenEndpointAuthMethod") + @Valid + public MetadataProperty getTokenEndpointAuthMethod() { + return tokenEndpointAuthMethod; + } + public void setTokenEndpointAuthMethod(MetadataProperty tokenEndpointAuthMethod) { + this.tokenEndpointAuthMethod = tokenEndpointAuthMethod; + } + + /** + **/ + public OIDCMetaData tokenEndpointSignatureAlgorithm(MetadataProperty tokenEndpointSignatureAlgorithm) { + + this.tokenEndpointSignatureAlgorithm = tokenEndpointSignatureAlgorithm; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("tokenEndpointSignatureAlgorithm") + @Valid + public MetadataProperty getTokenEndpointSignatureAlgorithm() { + return tokenEndpointSignatureAlgorithm; + } + public void setTokenEndpointSignatureAlgorithm(MetadataProperty tokenEndpointSignatureAlgorithm) { + this.tokenEndpointSignatureAlgorithm = tokenEndpointSignatureAlgorithm; + } + @Override public boolean equals(java.lang.Object o) { @@ -234,12 +272,17 @@ public boolean equals(java.lang.Object o) { Objects.equals(this.idTokenEncryptionMethod, oiDCMetaData.idTokenEncryptionMethod) && Objects.equals(this.scopeValidators, oiDCMetaData.scopeValidators) && Objects.equals(this.accessTokenType, oiDCMetaData.accessTokenType) && - Objects.equals(this.accessTokenBindingType, oiDCMetaData.accessTokenBindingType); + Objects.equals(this.accessTokenBindingType, oiDCMetaData.accessTokenBindingType) && + Objects.equals(this.tokenEndpointAuthMethod, oiDCMetaData.tokenEndpointAuthMethod) && + Objects.equals(this.tokenEndpointSignatureAlgorithm, oiDCMetaData.tokenEndpointSignatureAlgorithm); } @Override public int hashCode() { - return Objects.hash(allowedGrantTypes, defaultUserAccessTokenExpiryTime, defaultApplicationAccessTokenExpiryTime, defaultRefreshTokenExpiryTime, defaultIdTokenExpiryTime, idTokenEncryptionAlgorithm, idTokenEncryptionMethod, scopeValidators, accessTokenType, accessTokenBindingType); + return Objects.hash(allowedGrantTypes, defaultUserAccessTokenExpiryTime, + defaultApplicationAccessTokenExpiryTime, defaultRefreshTokenExpiryTime, defaultIdTokenExpiryTime, + idTokenEncryptionAlgorithm, idTokenEncryptionMethod, scopeValidators, accessTokenType, + accessTokenBindingType, tokenEndpointAuthMethod, tokenEndpointSignatureAlgorithm); } @Override @@ -258,6 +301,9 @@ public String toString() { sb.append(" scopeValidators: ").append(toIndentedString(scopeValidators)).append("\n"); sb.append(" accessTokenType: ").append(toIndentedString(accessTokenType)).append("\n"); sb.append(" accessTokenBindingType: ").append(toIndentedString(accessTokenBindingType)).append("\n"); + sb.append(" tokenEndpointAuthMethod: ").append(toIndentedString(tokenEndpointAuthMethod)).append("\n"); + sb.append(" tokenEndpointSignatureAlgorithm: ").append(toIndentedString(tokenEndpointSignatureAlgorithm)) + .append("\n"); sb.append("}"); return sb.toString(); } diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/OpenIDConnectConfiguration.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/OpenIDConnectConfiguration.java index 2c3ea24467..ddb0d24f77 100644 --- a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/OpenIDConnectConfiguration.java +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/OpenIDConnectConfiguration.java @@ -80,7 +80,10 @@ public static StateEnum fromValue(String value) { private OIDCLogoutConfiguration logout; private Boolean validateRequestObjectSignature = false; private List scopeValidators = null; - + private ClientAuthenticationConfiguration clientAuthentication; + private RequestObjectConfiguration requestObject; + private PushAuthorizationRequestConfiguration pushAuthorizationRequest; + private SubjectConfiguration subject; /** **/ @@ -367,8 +370,79 @@ public OpenIDConnectConfiguration addScopeValidatorsItem(String scopeValidatorsI this.scopeValidators.add(scopeValidatorsItem); return this; } + /** + **/ + public OpenIDConnectConfiguration clientAuthentication(ClientAuthenticationConfiguration clientAuthentication) { + + this.clientAuthentication = clientAuthentication; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("clientAuthentication") + @Valid + public ClientAuthenticationConfiguration getClientAuthentication() { + return clientAuthentication; + } + public void setClientAuthentication(ClientAuthenticationConfiguration clientAuthentication) { + this.clientAuthentication = clientAuthentication; + } + + /** + **/ + public OpenIDConnectConfiguration requestObject(RequestObjectConfiguration requestObject) { + + this.requestObject = requestObject; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("requestObject") + @Valid + public RequestObjectConfiguration getRequestObject() { + return requestObject; + } + public void setRequestObject(RequestObjectConfiguration requestObject) { + this.requestObject = requestObject; + } + + /** + **/ + public OpenIDConnectConfiguration pushAuthorizationRequest(PushAuthorizationRequestConfiguration pushAuthorizationRequest) { + + this.pushAuthorizationRequest = pushAuthorizationRequest; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("pushAuthorizationRequest") + @Valid + public PushAuthorizationRequestConfiguration getPushAuthorizationRequest() { + return pushAuthorizationRequest; + } + public void setPushAuthorizationRequest(PushAuthorizationRequestConfiguration pushAuthorizationRequest) { + this.pushAuthorizationRequest = pushAuthorizationRequest; + } + + /** + **/ + public OpenIDConnectConfiguration subject(SubjectConfiguration subject) { + + this.subject = subject; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("subject") + @Valid + public SubjectConfiguration getSubject() { + return subject; + } + public void setSubject(SubjectConfiguration subject) { + this.subject = subject; + } + - @Override public boolean equals(Object o) { @@ -381,25 +455,30 @@ public boolean equals(Object o) { } OpenIDConnectConfiguration openIDConnectConfiguration = (OpenIDConnectConfiguration) o; return Objects.equals(this.clientId, openIDConnectConfiguration.clientId) && - Objects.equals(this.clientSecret, openIDConnectConfiguration.clientSecret) && - Objects.equals(this.state, openIDConnectConfiguration.state) && - Objects.equals(this.grantTypes, openIDConnectConfiguration.grantTypes) && - Objects.equals(this.callbackURLs, openIDConnectConfiguration.callbackURLs) && - Objects.equals(this.allowedOrigins, openIDConnectConfiguration.allowedOrigins) && - Objects.equals(this.publicClient, openIDConnectConfiguration.publicClient) && - Objects.equals(this.pkce, openIDConnectConfiguration.pkce) && - Objects.equals(this.accessToken, openIDConnectConfiguration.accessToken) && - Objects.equals(this.refreshToken, openIDConnectConfiguration.refreshToken) && - Objects.equals(this.idToken, openIDConnectConfiguration.idToken) && - Objects.equals(this.logout, openIDConnectConfiguration.logout) && - Objects.equals(this.validateRequestObjectSignature, openIDConnectConfiguration.validateRequestObjectSignature) && - Objects.equals(this.scopeValidators, openIDConnectConfiguration.scopeValidators); + Objects.equals(this.clientSecret, openIDConnectConfiguration.clientSecret) && + Objects.equals(this.state, openIDConnectConfiguration.state) && + Objects.equals(this.grantTypes, openIDConnectConfiguration.grantTypes) && + Objects.equals(this.callbackURLs, openIDConnectConfiguration.callbackURLs) && + Objects.equals(this.allowedOrigins, openIDConnectConfiguration.allowedOrigins) && + Objects.equals(this.publicClient, openIDConnectConfiguration.publicClient) && + Objects.equals(this.pkce, openIDConnectConfiguration.pkce) && + Objects.equals(this.accessToken, openIDConnectConfiguration.accessToken) && + Objects.equals(this.refreshToken, openIDConnectConfiguration.refreshToken) && + Objects.equals(this.idToken, openIDConnectConfiguration.idToken) && + Objects.equals(this.logout, openIDConnectConfiguration.logout) && + Objects.equals(this.validateRequestObjectSignature, openIDConnectConfiguration + .validateRequestObjectSignature) && + Objects.equals(this.scopeValidators, openIDConnectConfiguration.scopeValidators) && + Objects.equals(this.scopeValidators, openIDConnectConfiguration.scopeValidators) && + Objects.equals(this.clientAuthentication, openIDConnectConfiguration.clientAuthentication) && + Objects.equals(this.requestObject, openIDConnectConfiguration.requestObject) && + Objects.equals(this.pushAuthorizationRequest, openIDConnectConfiguration.pushAuthorizationRequest) && + Objects.equals(this.subject, openIDConnectConfiguration.subject); } @Override public int hashCode() { - return Objects.hash(clientId, clientSecret, state, grantTypes, callbackURLs, allowedOrigins, publicClient, pkce, accessToken, refreshToken, idToken, logout, validateRequestObjectSignature, scopeValidators); - } + return Objects.hash(clientId, clientSecret, state, grantTypes, callbackURLs, allowedOrigins, publicClient, pkce, accessToken, refreshToken, idToken, logout, validateRequestObjectSignature, scopeValidators, clientAuthentication, requestObject, pushAuthorizationRequest, subject); } @Override public String toString() { diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/PushAuthorizationRequestConfiguration.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/PushAuthorizationRequestConfiguration.java new file mode 100644 index 0000000000..ed1ff086af --- /dev/null +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/PushAuthorizationRequestConfiguration.java @@ -0,0 +1,71 @@ +package org.wso2.identity.integration.test.rest.api.server.application.management.v1.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.Valid; +import java.util.Objects; + +public class PushAuthorizationRequestConfiguration { + + private Boolean requirePushAuthorizationRequest; + + /** + **/ + public PushAuthorizationRequestConfiguration requirePushAuthorizationRequest(Boolean requirePushAuthorizationRequest) { + + this.requirePushAuthorizationRequest = requirePushAuthorizationRequest; + return this; + } + + @ApiModelProperty(example = "false", value = "") + @JsonProperty("requirePushAuthorizationRequest") + @Valid + public Boolean getRequirePushAuthorizationRequest() { + return requirePushAuthorizationRequest; + } + public void setRequirePushAuthorizationRequest(Boolean requirePushAuthorizationRequest) { + this.requirePushAuthorizationRequest = requirePushAuthorizationRequest; + } + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PushAuthorizationRequestConfiguration pushAuthorizationRequestConfiguration = (PushAuthorizationRequestConfiguration) o; + return Objects.equals(this.requirePushAuthorizationRequest, pushAuthorizationRequestConfiguration.requirePushAuthorizationRequest); + } + + @Override + public int hashCode() { + return Objects.hash(requirePushAuthorizationRequest); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class PushAuthorizationRequestConfiguration {\n"); + + sb.append(" requirePushAuthorizationRequest: ").append(toIndentedString(requirePushAuthorizationRequest)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n"); + } +} diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/RequestObjectConfiguration.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/RequestObjectConfiguration.java new file mode 100644 index 0000000000..628102d149 --- /dev/null +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/RequestObjectConfiguration.java @@ -0,0 +1,114 @@ +package org.wso2.identity.integration.test.rest.api.server.application.management.v1.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.Valid; +import java.util.Objects; + +public class RequestObjectConfiguration { + + private String requestObjectSigningAlg; + private Boolean requireSignedRequestObject; + + private RequestObjectEncryptionConfiguration encryption; + + /** + **/ + public RequestObjectConfiguration requestObjectSigningAlg(String requestObjectSigningAlg) { + + this.requestObjectSigningAlg = requestObjectSigningAlg; + return this; + } + + @ApiModelProperty(example = "PS256", value = "") + @JsonProperty("requestObjectSigningAlg") + @Valid + public String getRequestObjectSigningAlg() { + return requestObjectSigningAlg; + } + public void setRequestObjectSigningAlg(String requestObjectSigningAlg) { + this.requestObjectSigningAlg = requestObjectSigningAlg; + } + + /** + **/ + public RequestObjectConfiguration requireSignedRequestObject(Boolean requireSignedRequestObject) { + + this.requireSignedRequestObject = requireSignedRequestObject; + return this; + } + + @ApiModelProperty(example = "false", value = "") + @JsonProperty("requireSignedRequestObject") + @Valid + public Boolean getRequireSignedRequestObject() { + return requireSignedRequestObject; + } + public void setRequireSignedRequestObject(Boolean requireSignedRequestObject) { + this.requireSignedRequestObject = requireSignedRequestObject; + } + + /** + **/ + public RequestObjectConfiguration encryption(RequestObjectEncryptionConfiguration encryption) { + + this.encryption = encryption; + return this; + } + + @ApiModelProperty(value = "") + @JsonProperty("encryption") + @Valid + public RequestObjectEncryptionConfiguration getEncryption() { + return encryption; + } + public void setEncryption(RequestObjectEncryptionConfiguration encryption) { + this.encryption = encryption; + } + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RequestObjectConfiguration requestObjectConfiguration = (RequestObjectConfiguration) o; + return Objects.equals(this.requestObjectSigningAlg, requestObjectConfiguration.requestObjectSigningAlg) && + Objects.equals(this.requireSignedRequestObject, requestObjectConfiguration.requireSignedRequestObject) && + Objects.equals(this.encryption, requestObjectConfiguration.encryption); + } + + @Override + public int hashCode() { + return Objects.hash(requestObjectSigningAlg, requireSignedRequestObject, encryption); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class RequestObjectConfiguration {\n"); + + sb.append(" requestObjectSigningAlg: ").append(toIndentedString(requestObjectSigningAlg)).append("\n"); + sb.append(" requireSignedRequestObject: ").append(toIndentedString(requireSignedRequestObject)).append("\n"); + sb.append(" encryption: ").append(toIndentedString(encryption)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n"); + } +} From 646a466378af169b977947f60ca853e88073e33f Mon Sep 17 00:00:00 2001 From: sachinisiriwardene Date: Wed, 25 Oct 2023 14:52:22 +0530 Subject: [PATCH 2/2] add model changes for application management --- .../RequestObjectEncryptionConfiguration.java | 92 +++++++++++++++++++ .../v1/model/SubjectConfiguration.java | 92 +++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/RequestObjectEncryptionConfiguration.java create mode 100644 modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/SubjectConfiguration.java diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/RequestObjectEncryptionConfiguration.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/RequestObjectEncryptionConfiguration.java new file mode 100644 index 0000000000..2b67c58cb8 --- /dev/null +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/RequestObjectEncryptionConfiguration.java @@ -0,0 +1,92 @@ +package org.wso2.identity.integration.test.rest.api.server.application.management.v1.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.Valid; +import java.util.Objects; + +public class RequestObjectEncryptionConfiguration { + + private String algorithm; + private String method; + + /** + **/ + public RequestObjectEncryptionConfiguration algorithm(String algorithm) { + + this.algorithm = algorithm; + return this; + } + + @ApiModelProperty(example = "RSA-OAEP", value = "") + @JsonProperty("algorithm") + @Valid + public String getAlgorithm() { + return algorithm; + } + public void setAlgorithm(String algorithm) { + this.algorithm = algorithm; + } + + /** + **/ + public RequestObjectEncryptionConfiguration method(String method) { + + this.method = method; + return this; + } + + @ApiModelProperty(example = "A128CBC+HS256", value = "") + @JsonProperty("method") + @Valid + public String getMethod() { + return method; + } + public void setMethod(String method) { + this.method = method; + } + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RequestObjectEncryptionConfiguration requestObjectEncryptionConfiguration = (RequestObjectEncryptionConfiguration) o; + return Objects.equals(this.algorithm, requestObjectEncryptionConfiguration.algorithm) && + Objects.equals(this.method, requestObjectEncryptionConfiguration.method); + } + + @Override + public int hashCode() { + return Objects.hash(algorithm, method); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class RequestObjectEncryptionConfiguration {\n"); + + sb.append(" algorithm: ").append(toIndentedString(algorithm)).append("\n"); + sb.append(" method: ").append(toIndentedString(method)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n"); + } +} diff --git a/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/SubjectConfiguration.java b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/SubjectConfiguration.java new file mode 100644 index 0000000000..05ec932ba6 --- /dev/null +++ b/modules/integration/tests-integration/tests-backend/src/test/java/org/wso2/identity/integration/test/rest/api/server/application/management/v1/model/SubjectConfiguration.java @@ -0,0 +1,92 @@ +package org.wso2.identity.integration.test.rest.api.server.application.management.v1.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.Valid; +import java.util.Objects; + +public class SubjectConfiguration { + + private String subjectType; + private String sectorIdentifierUri; + + /** + **/ + public SubjectConfiguration subjectType(String subjectType) { + + this.subjectType = subjectType; + return this; + } + + @ApiModelProperty(example = "public", value = "") + @JsonProperty("subjectType") + @Valid + public String getSubjectType() { + return subjectType; + } + public void setSubjectType(String subjectType) { + this.subjectType = subjectType; + } + + /** + **/ + public SubjectConfiguration sectorIdentifierUri(String sectorIdentifierUri) { + + this.sectorIdentifierUri = sectorIdentifierUri; + return this; + } + + @ApiModelProperty(example = "https://app.example.com", value = "") + @JsonProperty("sectorIdentifierUri") + @Valid + public String getSectorIdentifierUri() { + return sectorIdentifierUri; + } + public void setSectorIdentifierUri(String sectorIdentifierUri) { + this.sectorIdentifierUri = sectorIdentifierUri; + } + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SubjectConfiguration subjectConfiguration = (SubjectConfiguration) o; + return Objects.equals(this.subjectType, subjectConfiguration.subjectType) && + Objects.equals(this.sectorIdentifierUri, subjectConfiguration.sectorIdentifierUri); + } + + @Override + public int hashCode() { + return Objects.hash(subjectType, sectorIdentifierUri); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class SubjectConfiguration {\n"); + + sb.append(" subjectType: ").append(toIndentedString(subjectType)).append("\n"); + sb.append(" sectorIdentifierUri: ").append(toIndentedString(sectorIdentifierUri)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n"); + } +} \ No newline at end of file