OIDC dynamic client registration with response_type=none
Closes #19564 Signed-off-by: Giuseppe Graziano <g.graziano94@gmail.com>
This commit is contained in:
parent
db14ab1365
commit
35c8c09b8d
3 changed files with 86 additions and 1 deletions
|
@ -95,7 +95,7 @@ public class DescriptionConverter {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
OIDCResponseType responseType = OIDCResponseType.parse(oidcResponseTypes);
|
OIDCResponseType responseType = OIDCResponseType.parse(oidcResponseTypes);
|
||||||
client.setStandardFlowEnabled(responseType.hasResponseType(OIDCResponseType.CODE));
|
client.setStandardFlowEnabled(responseType.hasResponseType(OIDCResponseType.CODE) || responseType.hasResponseType(OIDCResponseType.NONE));
|
||||||
client.setImplicitFlowEnabled(responseType.isImplicitOrHybridFlow());
|
client.setImplicitFlowEnabled(responseType.isImplicitOrHybridFlow());
|
||||||
|
|
||||||
if (oidcGrantTypes != null) {
|
if (oidcGrantTypes != null) {
|
||||||
|
|
|
@ -203,6 +203,30 @@ public class OIDCClientRegistrationTest extends AbstractClientRegistrationTest {
|
||||||
assertTrue(CollectionUtil.collectionEquals(realmDefaultClientScopes, registeredDefaultClientScopes));
|
assertTrue(CollectionUtil.collectionEquals(realmDefaultClientScopes, registeredDefaultClientScopes));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createClientResponseTypeNone() throws ClientRegistrationException {
|
||||||
|
OIDCClientRepresentation client = createRep();
|
||||||
|
client.setResponseTypes(List.of("none"));
|
||||||
|
OIDCClientRepresentation response = reg.oidc().create(client);
|
||||||
|
|
||||||
|
assertNotNull(response.getRegistrationAccessToken());
|
||||||
|
assertNotNull(response.getClientIdIssuedAt());
|
||||||
|
assertNotNull(response.getClientId());
|
||||||
|
assertNotNull(response.getClientSecret());
|
||||||
|
assertEquals(0, response.getClientSecretExpiresAt().intValue());
|
||||||
|
assertEquals(AUTH_SERVER_ROOT + "/realms/" + REALM_NAME + "/clients-registrations/openid-connect/" + response.getClientId(), response.getRegistrationClientUri());
|
||||||
|
assertEquals("RegistrationAccessTokenTest", response.getClientName());
|
||||||
|
assertEquals("http://root", response.getClientUri());
|
||||||
|
assertEquals(1, response.getRedirectUris().size());
|
||||||
|
assertEquals("http://redirect", response.getRedirectUris().get(0));
|
||||||
|
assertEquals(List.of("code", "none"), response.getResponseTypes());
|
||||||
|
assertEquals(Arrays.asList(OAuth2Constants.AUTHORIZATION_CODE, OAuth2Constants.REFRESH_TOKEN), response.getGrantTypes());
|
||||||
|
assertEquals(OIDCLoginProtocol.CLIENT_SECRET_BASIC, response.getTokenEndpointAuthMethod());
|
||||||
|
Assert.assertNull(response.getUserinfoSignedResponseAlg());
|
||||||
|
assertEquals("http://frontchannel", response.getFrontChannelLogoutUri());
|
||||||
|
assertTrue(response.getFrontchannelLogoutSessionRequired());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateClientError() throws ClientRegistrationException {
|
public void updateClientError() throws ClientRegistrationException {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||||
|
* and other contributors as indicated by the @author tags.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.keycloak.testsuite.oidc.flows;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.keycloak.events.Details;
|
||||||
|
import org.keycloak.protocol.oidc.utils.OIDCResponseType;
|
||||||
|
import org.keycloak.representations.IDToken;
|
||||||
|
import org.keycloak.representations.idm.EventRepresentation;
|
||||||
|
import org.keycloak.testsuite.Assert;
|
||||||
|
import org.keycloak.testsuite.util.OAuthClient;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test for response_type=none
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:ggrazian@redhat.com">Giuseppe Graziano</a>
|
||||||
|
*/
|
||||||
|
public class OIDCBasicResponseTypeNoneTest extends AbstractOIDCResponseTypeTest {
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void clientConfiguration() {
|
||||||
|
clientManagerBuilder().standardFlow(true).implicitFlow(false);
|
||||||
|
|
||||||
|
oauth.clientId("test-app");
|
||||||
|
oauth.responseType(OIDCResponseType.NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isFragment() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<IDToken> testAuthzResponseAndRetrieveIDTokens(OAuthClient.AuthorizationEndpointResponse authzResponse, EventRepresentation loginEvent) {
|
||||||
|
Assert.assertEquals(OIDCResponseType.NONE, loginEvent.getDetails().get(Details.RESPONSE_TYPE));
|
||||||
|
|
||||||
|
Assert.assertNull(authzResponse.getCode());
|
||||||
|
Assert.assertNull(authzResponse.getAccessToken());
|
||||||
|
Assert.assertNull(authzResponse.getIdToken());
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue