|
23 | 23 | import org.keycloak.common.constants.KerberosConstants; |
24 | 24 | import org.keycloak.common.constants.ServiceAccountConstants; |
25 | 25 | import org.keycloak.common.util.UriUtils; |
| 26 | +import org.keycloak.connections.httpclient.HttpClientProvider; |
26 | 27 | import org.keycloak.events.EventBuilder; |
27 | 28 | import org.keycloak.models.ClientModel; |
28 | 29 | import org.keycloak.models.ClientScopeModel; |
|
47 | 48 | import org.keycloak.protocol.oidc.mappers.UserRealmRoleMappingMapper; |
48 | 49 | import org.keycloak.protocol.oidc.mappers.UserSessionNoteMapper; |
49 | 50 | import org.keycloak.protocol.oidc.mappers.SubMapper; |
| 51 | +import org.keycloak.provider.ProviderConfigProperty; |
| 52 | +import org.keycloak.provider.ProviderConfigurationBuilder; |
50 | 53 | import org.keycloak.representations.IDToken; |
51 | 54 | import org.keycloak.representations.idm.ClientRepresentation; |
52 | 55 | import org.keycloak.services.ServicesLogger; |
53 | 56 | import org.keycloak.services.managers.AuthenticationManager; |
54 | 57 |
|
55 | 58 | import java.util.HashMap; |
56 | 59 | import java.util.HashSet; |
| 60 | +import java.util.List; |
57 | 61 | import java.util.Map; |
58 | 62 | import java.util.Set; |
59 | 63 |
|
60 | 64 | import static org.keycloak.models.ImpersonationSessionNote.IMPERSONATOR_ID; |
61 | 65 | import static org.keycloak.models.ImpersonationSessionNote.IMPERSONATOR_USERNAME; |
| 66 | +import static org.keycloak.protocol.oidc.OIDCProviderConfig.DEFAULT_ADDITIONAL_REQ_PARAMS_FAIL_FAST; |
| 67 | +import static org.keycloak.protocol.oidc.OIDCProviderConfig.DEFAULT_ADDITIONAL_REQ_PARAMS_MAX_NUMBER; |
| 68 | +import static org.keycloak.protocol.oidc.OIDCProviderConfig.DEFAULT_ADDITIONAL_REQ_PARAMS_MAX_OVERALL_SIZE; |
| 69 | +import static org.keycloak.protocol.oidc.OIDCProviderConfig.DEFAULT_ADDITIONAL_REQ_PARAMS_MAX_SIZE; |
| 70 | +import static org.keycloak.protocol.oidc.OIDCProviderConfig.DEFAULT_REQ_PARAMS_DEFAULT_MAX_SIZE; |
62 | 71 |
|
63 | 72 | /** |
64 | 73 | * @author <a href="mailto:[email protected]">Bill Burke</a> |
@@ -115,10 +124,12 @@ public class OIDCLoginProtocolFactory extends AbstractLoginProtocolFactory { |
115 | 124 | public static final String ROLES_SCOPE_CONSENT_TEXT = "${rolesScopeConsentText}"; |
116 | 125 | public static final String ORGANIZATION_SCOPE_CONSENT_TEXT = "${organizationScopeConsentText}"; |
117 | 126 |
|
118 | | - public static final String CONFIG_OIDC_REQ_PARAMS_MAX_NUMBER = "add-req-params-max-number"; |
119 | | - public static final String CONFIG_OIDC_REQ_PARAMS_MAX_SIZE = "add-req-params-max-size"; |
120 | | - public static final String CONFIG_OIDC_REQ_PARAMS_MAX_OVERALL_SIZE = "add-req-params-max-overall-size"; |
121 | | - public static final String CONFIG_OIDC_REQ_PARAMS_FAIL_FAST = "add-req-params-fail-fast"; |
| 127 | + public static final String CONFIG_OIDC_REQ_PARAMS_DEFAULT_MAX_SIZE = "req-params-default-max-size"; |
| 128 | + public static final String CONFIG_OIDC_REQ_PARAMS_MAX_SIZE_PREFIX = "req-params-max-size"; |
| 129 | + public static final String CONFIG_OIDC_ADD_REQ_PARAMS_MAX_NUMBER = "add-req-params-max-number"; |
| 130 | + public static final String CONFIG_OIDC_ADD_REQ_PARAMS_MAX_SIZE = "add-req-params-max-size"; |
| 131 | + public static final String CONFIG_OIDC_ADD_REQ_PARAMS_MAX_OVERALL_SIZE = "add-req-params-max-overall-size"; |
| 132 | + public static final String CONFIG_OIDC_ADD_REQ_PARAMS_FAIL_FAST = "add-req-params-fail-fast"; |
122 | 133 |
|
123 | 134 | /** |
124 | 135 | * @deprecated To be removed in Keycloak 27 |
@@ -554,4 +565,48 @@ public void setupClientDefaults(ClientRepresentation rep, ClientModel newClient) |
554 | 565 | public int order() { |
555 | 566 | return UI_ORDER; |
556 | 567 | } |
| 568 | + |
| 569 | + @Override |
| 570 | + public List<ProviderConfigProperty> getConfigMetadata() { |
| 571 | + return ProviderConfigurationBuilder.create() |
| 572 | + .property() |
| 573 | + .name(CONFIG_OIDC_REQ_PARAMS_DEFAULT_MAX_SIZE) |
| 574 | + .type("int") |
| 575 | + .helpText("Maximum default length of the standard OIDC parameter sent to the OIDC authentication request. This applies to most of the standard parameters like for example 'state', 'nonce' etc." + |
| 576 | + " The exception is 'login_hint' parameter, which has maximum length of 255 characters.") |
| 577 | + .defaultValue(DEFAULT_REQ_PARAMS_DEFAULT_MAX_SIZE) |
| 578 | + .add() |
| 579 | + .property() |
| 580 | + .name(CONFIG_OIDC_REQ_PARAMS_MAX_SIZE_PREFIX + "--" + OIDCLoginProtocol.LOGIN_HINT_PARAM) |
| 581 | + .type("int") |
| 582 | + .helpText("Maximum length of the standard OIDC authentication request parameter overriden for the specified parameter. Useful if some standard OIDC parameter should have different limit than '" + CONFIG_OIDC_REQ_PARAMS_DEFAULT_MAX_SIZE + |
| 583 | + "'. It is needed to add the name of the parameter after this prefix into the configuration. In this example, the '" + OIDCLoginProtocol.LOGIN_HINT_PARAM + "' parameter is used, but this format is supported for any known standard OIDC/OAuth2 parameter.") |
| 584 | + .add() |
| 585 | + .property() |
| 586 | + .name(CONFIG_OIDC_ADD_REQ_PARAMS_MAX_NUMBER) |
| 587 | + .type("int") |
| 588 | + .helpText("Maximum number of additional request parameters sent to the OIDC authentication request. As 'additional request parameter' is meant some custom parameter not directly treated as standard OIDC/OAuth2 protocol parameter. Additional parameters might be useful for example to add custom claims to the OIDC token (in case that also particular protocol mappers are configured).") |
| 589 | + .defaultValue(DEFAULT_ADDITIONAL_REQ_PARAMS_MAX_NUMBER) |
| 590 | + .add() |
| 591 | + .property() |
| 592 | + .name(CONFIG_OIDC_ADD_REQ_PARAMS_MAX_SIZE) |
| 593 | + .type("int") |
| 594 | + .helpText("Maximum size of single additional request parameter value See '" + CONFIG_OIDC_ADD_REQ_PARAMS_MAX_NUMBER + "' for more details about additional request parameters") |
| 595 | + .defaultValue(DEFAULT_ADDITIONAL_REQ_PARAMS_MAX_SIZE) |
| 596 | + .add() |
| 597 | + .property() |
| 598 | + .name(CONFIG_OIDC_ADD_REQ_PARAMS_MAX_OVERALL_SIZE) |
| 599 | + .type("int") |
| 600 | + .helpText("Maximum size of all additional request parameters values together. See '" + CONFIG_OIDC_ADD_REQ_PARAMS_MAX_NUMBER + "' for more details about additional request parameters") |
| 601 | + .defaultValue(DEFAULT_ADDITIONAL_REQ_PARAMS_MAX_OVERALL_SIZE) |
| 602 | + .add() |
| 603 | + .property() |
| 604 | + .name(CONFIG_OIDC_ADD_REQ_PARAMS_FAIL_FAST) |
| 605 | + .type("boolean") |
| 606 | + .helpText("Whether the fail-fast strategy should be enforced in case if the limit for some standard OIDC parameter or additional OIDC parameter is not met for the parameters sent to the OIDC authentication request." + |
| 607 | + " If false, then all additional request parameters to not meet the configuration are silently ignored. If true, an exception will be raised and OIDC authentication request will not be allowed.") |
| 608 | + .defaultValue(DEFAULT_ADDITIONAL_REQ_PARAMS_FAIL_FAST) |
| 609 | + .add() |
| 610 | + .build(); |
| 611 | + } |
557 | 612 | } |
0 commit comments