Tag: keycloak

RESTEASY003145:无法找到内容类型application / json的MessageBodyReader并键入class org.keycloak.representations.AccessTokenResponse

我正在尝试测试Keycloak REST API。 Instaled版本2.1.0.Final。 我可以通过浏览器使用SSL访问管理员而不会出现问题。 我正在使用上面的代码: Keycloak keycloakClient = KeycloakBuilder.builder() .serverUrl(“https://keycloak.intra.rps.com.br/auth”) .realm(“testrealm”) .username(“development”) .password(“development”) .clientId(“admin-cli”) .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build()) .build(); List rr = keycloakClient.realms().findAll(); 并得到错误: javax.ws.rs.ProcessingException: RESTEASY003145: Unable to find a MessageBodyReader of content-type application/json and type class org.keycloak.representations.AccessTokenResponse javax.ws.rs.client.ResponseProcessingException: javax.ws.rs.ProcessingException: RESTEASY003145: Unable to find a MessageBodyReader of content-type application/json and type class org.keycloak.representations.AccessTokenResponse at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:141) at […]

Keycloak注销不会结束会话

我在使用Spring Framework的Java应用程序中使用Keycloak 3.4,使用Keycloak Jetty-81-Adapter 3.4在Jetty 8.1中使用。 根据Keycloak文档,我应该能够在Java EE应用程序中使用HttpServletRequest从Keycloak注销。 但是,即使Jetty支持HttpServletRequests,这在我的情况下也不起作用。 您可以通过多种方式注销Web应用程序。 对于Java EE servlet容器,可以调用HttpServletRequest.logout().. 如果我尝试以这种方式注销,我会被重定向到keycloak(登录屏幕,可以选择多个域登录)。 但是当我选择我喜欢的领域时,我会立即再次登录到webapplication,而无需提供任何凭据。 我尝试了替代方法,重定向到Keycloak: 对于其他浏览器应用程序,您可以将浏览器重定向到 http:// auth-server / auth / realms / {realm-name} / protocol / openid-connect / logout?redirect_uri = encodedRedirectUri 但是它会在Keycloak日志中抛出连接拒绝错误,因为Keycloak试图直接调用我的webapp。 它对保持活动状态的Keycloak会话没有影响。 我强烈建议不要直接从Keycloak到webapp进行必要的服务器端调用。 为什么HttpServletRequest.logout()在我的情况下不破坏keycloak会话的任何建议? HttpServletRequest的Jetty实现是否与Java EE实现完全不同,它根本无法工作?

使用keycloak在servlet应用程序中获取用户角色

我正在使用keycloak来保护我的servlet。 我必须添加新角色并动态地将它们分配给用户。 它使用admin API在keycloak中工作,但我无法弄清楚如何在servlet中获取特定用户的角色。 我尝试了这个解决方案,但我得到了空集: protected void doPost(HttpServletRequest request, HttpServletResponse response) { … KeycloakSecurityContext context = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName()); Set roles = AdapterUtils.getRolesFromSecurityContext((RefreshableKeycloakSecurityContext) context); … }

如何在Keycloak身份validation之前调用javax.servlet.Filter

我们使用resteasy开发了一个REST API。 (部署在wildfly 10中) 基本上这些REST API是从另一个应用程序内部调用的,端点是用keycloak保护的。 但是一个端点暴露给外部方(该端点也使用keycloak保护)。 但由于外部方无法提供Keycloak Autherization代码,我们已经完成了一个实现,其中客户端使用应用程序生成的auth_key进行注册,客户端将使用该auth_key调用端点。 然后在webfilter(javax.servlet.Filter)中,使用tha auth_key我们获得相关的keycloak authntication Bearer令牌。 如果需要(例如:令牌已过期),我们也会调用Keycloak Server。 收到后,我们将Autherization令牌添加到Webfilter中的httpRequest并继续到终点应用程序。 但问题是, 在Web Filter之前调用KeyCloak身份validation 。 我正在寻找的是“如何在密钥泄露认证之前调用Webfilter?” 编辑: 现在我正试图找到这里提到的方法。 在Keycloak中进行身份validation之前将请求标头设置为请求 。 我可以在身份validation发生之前接听电话。 但是我无法在那里设置请求标头。 web.xml中 Restful Web Application resteasy.scan true keycloak.config.resolver package.to.HeaderBasedKeycloakConfigResolver REST endpoints /ep-name/resource-name resource-name KEYCLOAK realm-name role-name-for-resource-1 role-name-for-resource-2 org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap resteasy-servlet org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher resteasy.servlet.mapping.prefix /ep-name resteasy-servlet /ep-name/* WebFilter package.to.filter.WebFilter WebFilter /desired-ep-name/*

避免使用keycloak默认登录页面并使用项目登录页面

我正在创建一个angular.js Web应用程序,并寻找如何将keycloak集成到项目中。 我已阅读并观看了许多教程,我发现其中大多数用户都通过keycloak的默认登录页面登录/注册,然后重定向到应用程序。 我设计了自己的登录和注册页面,我想使用它。 我如何使用它们而不是keycloak默认值。 有没有我可以调用的API,或者可能是我的后端会这样做? 我还看到有适用于keycloak的弹簧适配器,我可以使用它们吗? 任何示例的任何链接都是好的。 我的第二个问题是注册时我可以在keycloak添加更多用户详细信息,如地址,dob,性别吗? 因为我的注册页面需要这些信息。