简体   繁体   English

在 Java 中创建 keycloak 角色时出现错误 400 错误请求

[英]Error 400 bad request when creating keycloak roles in Java

I try to create a Keycloak role from my Java program.我尝试从我的 Java 程序创建一个 Keycloak 角色。 I am able to create user so it's not a problem of connection to my Keycloak server but the create function for the role always give me an error 400 bad request.我能够创建用户,所以它不是连接到我的 Keycloak 服务器的问题,但是角色的创建函数总是给我一个错误 400 错误请求。 What is the solution to create a role from Java?从 Java 创建角色的解决方案是什么?

Keycloak kc = KeycloakBuilder.builder()
            .serverUrl("http://localhost:8080/auth")
            .realm("master")
            .grantType(OAuth2Constants.PASSWORD)
            .username("***")
            .password("***")
            .clientId("admin-cli")
            .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build())
            .build();

RoleRepresentation roleRepresentation = new RoleRepresentation();
roleRepresentation.setName(nomRole);
roleRepresentation.setClientRole(true);
kc.realm("master").roles().create(roleRepresentation);

error : Exception in thread "main" javax.ws.rs.BadRequestException: HTTP 400 Bad Request at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.handleErrorStatus(ClientInvocation.java:215) at org.jboss.resteasy.client.jaxrs.internal.proxy.extractors.DefaultEntityExtractorFactory$3.extractEntity(DefaultEntityExtractorFactory.java:50) at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invokeSync(ClientInvoker.java:150) at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:112) at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76) at com.sun.proxy.$Proxy25.create(Unknown Source) at Main.CreateKeycloakRole(Main.java:37) at Main.main(Main.java:96)错误:线程“main”中的异常 javax.ws.rs.BadRequestException: HTTP 400 Bad Request at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.handleErrorStatus(ClientInvocation.java:215) at org.jboss.resteasy。 client.jaxrs.internal.proxy.extractors.DefaultEntityExtractorFactory$3.extractEntity(DefaultEntityExtractorFactory.java:50) 在 org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invokeSync(ClientInvoker.java:150) 在 org.jboss .resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:112) at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76) at com.sun .proxy.$Proxy25.create(Unknown Source) at Main.CreateKeycloakRole(Main.java:37) at Main.main(Main.java:96)

One of the possible cause is nomRole is null.可能的原因之一是nomRole为空。

I can create a role using your code with Keycloak client 4.8.3 and Keycloak server 4.8.3.我可以在 Keycloak 客户端 4.8.3 和 Keycloak 服务器 4.8.3 上使用您的代码创建角色。

I have tried with the Keycloak 4.8.3 version and now it is working as expected !我已经尝试过 Keycloak 4.8.3 版本,现在它按预期工作了! I think my version was too old to handle role creation !我认为我的版本太旧而无法处理角色创建! For me the solution was just to take a newer version !对我来说,解决方案只是采用更新的版本! Thanks all for your help !感谢你的帮助 !

我升级到最新的 jboss/keycloak 图像,同样的代码对我有用

The same problem occurred to me when Consent Required was set to ON for a client.当客户端的Consent Required设置为ON时,我也遇到了同样的问题。 If I set it as OFF it works, I am looking into an issue.如果我将它设置为OFF它就可以工作,我正在研究一个问题。

您应该将客户端访问类型设置为“公共”(不仅),这很重要

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM