KEYCLOAK-16858 Client Policy - Improper retainAll operation in Client Scope Condition and other minor bugs
This commit is contained in:
parent
9df7fdbc55
commit
bcf313f321
3 changed files with 13 additions and 4 deletions
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
package org.keycloak.services.clientpolicy.condition;
|
package org.keycloak.services.clientpolicy.condition;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
@ -89,8 +88,8 @@ public class ClientScopesCondition implements ClientPolicyConditionProvider {
|
||||||
Collection<String> explicitSpecifiedScopes = new HashSet<>(Arrays.asList(explicitScopes.split(" ")));
|
Collection<String> explicitSpecifiedScopes = new HashSet<>(Arrays.asList(explicitScopes.split(" ")));
|
||||||
Set<String> defaultScopes = client.getClientScopes(true, true).keySet();
|
Set<String> defaultScopes = client.getClientScopes(true, true).keySet();
|
||||||
Set<String> optionalScopes = client.getClientScopes(false, true).keySet();
|
Set<String> optionalScopes = client.getClientScopes(false, true).keySet();
|
||||||
List<String> expectedScopes = componentModel.getConfig().get(ClientScopesConditionFactory.SCOPES);
|
Set<String> expectedScopes = getScopesForMatching();
|
||||||
if (expectedScopes == null) expectedScopes = new ArrayList<>();
|
if (expectedScopes == null) expectedScopes = new HashSet<>();
|
||||||
|
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
explicitSpecifiedScopes.stream().forEach(i -> ClientPolicyLogger.log(logger, " explicit specified client scope = " + i));
|
explicitSpecifiedScopes.stream().forEach(i -> ClientPolicyLogger.log(logger, " explicit specified client scope = " + i));
|
||||||
|
@ -115,4 +114,10 @@ public class ClientScopesCondition implements ClientPolicyConditionProvider {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<String> getScopesForMatching() {
|
||||||
|
if (componentModel.getConfig() == null) return null;
|
||||||
|
List<String> scopes = componentModel.getConfig().get(ClientScopesConditionFactory.SCOPES);
|
||||||
|
if (scopes == null) return null;
|
||||||
|
return new HashSet<>(scopes);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -109,7 +109,7 @@ public class ClientUpdateSourceGroupsCondition implements ClientPolicyConditionP
|
||||||
Set<String> expectedGroups = instantiateGroupsForMatching();
|
Set<String> expectedGroups = instantiateGroupsForMatching();
|
||||||
if (expectedGroups == null) return false;
|
if (expectedGroups == null) return false;
|
||||||
|
|
||||||
// user.getRolesStream() never returns null according to {@link UserModel.getGroupsStream}
|
// user.getGroupsStream() never returns null according to {@link UserModel.getGroupsStream}
|
||||||
Set<String> groups = user.getGroupsStream().map(GroupModel::getName).collect(Collectors.toSet());
|
Set<String> groups = user.getGroupsStream().map(GroupModel::getName).collect(Collectors.toSet());
|
||||||
|
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
|
|
|
@ -891,6 +891,9 @@ public class ClientPolicyBasicsTest extends AbstractKeycloakTest {
|
||||||
oauth.scope("microprofile-jwt" + " " + "profile");
|
oauth.scope("microprofile-jwt" + " " + "profile");
|
||||||
failLoginByNotFollowingPKCE(clientAlphaId);
|
failLoginByNotFollowingPKCE(clientAlphaId);
|
||||||
|
|
||||||
|
oauth.scope("microprofile-jwt" + " " + "profile");
|
||||||
|
failLoginByNotFollowingPKCE(clientAlphaId);
|
||||||
|
|
||||||
successfulLoginAndLogoutWithPKCE(clientAlphaId, clientAlphaSecret, "test-user@localhost", "password");
|
successfulLoginAndLogoutWithPKCE(clientAlphaId, clientAlphaSecret, "test-user@localhost", "password");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
fail();
|
fail();
|
||||||
|
@ -1112,6 +1115,7 @@ public class ClientPolicyBasicsTest extends AbstractKeycloakTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@AuthServerContainerExclude(AuthServer.REMOTE)
|
@AuthServerContainerExclude(AuthServer.REMOTE)
|
||||||
|
@Test
|
||||||
public void testClientUpdateSourceHostsCondition() throws ClientRegistrationException, ClientPolicyException {
|
public void testClientUpdateSourceHostsCondition() throws ClientRegistrationException, ClientPolicyException {
|
||||||
String policyName = "MyPolicy";
|
String policyName = "MyPolicy";
|
||||||
createPolicy(policyName, DefaultClientPolicyProviderFactory.PROVIDER_ID, null, null, null);
|
createPolicy(policyName, DefaultClientPolicyProviderFactory.PROVIDER_ID, null, null, null);
|
||||||
|
|
Loading…
Reference in a new issue