当前位置: 首页 > 知识库问答 >
问题:

KeyClope,如何保护不服务于网页的spring boot后端?

关正雅
2023-03-14

我有一个前端,我通过让我们的登录页面向Keycloak服务器发出POST请求来保护它,这样我就可以获取访问令牌(JWT)。我们不使用kecloak提供的登录页面。此前端对后端(spel-boot)servlet进行REST调用,该servlet使用这些调用来查询数据库并将数据发送回前端。我看到的大多数关于保护spel-boot应用程序的教程都使用spel-boot来服务网页,并使用默认的keycloak登录页面。我的问题是,我如何在没有使用keycloak登录页面的情况下使用keycloak spel-boot适配器?是否有某种方法可以在每个请求中传递keycloak访问令牌,相当于keycloak可能期望的方式?

我正在使用keycloak版本7.0.0,并按角色保护每个endpoint。

我已经尽我所能地学习了本教程,除了@Controller的用法不同,并且没有像前面提到的那样使用任何spring boot模型对象来服务网页。目前,每个请求都会返回500个错误。这就引出了这个问题。https://www.thomasvitale.com/spring-boot-keycloak-security/

谢谢!

共有1个答案

咸育
2023-03-14

这个问题非常广泛,不能适用于Stackoverflow,但最后Stackoverflow的平台可以互相帮助,所以这里有一个解决方案。

在rest api项目中,创建一个KeyClope功能类,该类将对获取数据的所有请求进行身份验证。

让我们来看一个例子,假设我想在KeyClope中创建一个角色,以及在我的DB中创建一个角色,我必须做什么?

假设请求来自Rest客户端或GUI-

public void createRole(String createRoleAPIurl,String accessToken){
RoleRepresentation roleRepresentation = new RoleRepresentation();
roleRepresentation.setName(role.getRoleName());
roleRepresentation.setDescription(role.getDescription());
String convertValue = mapper.writeValueAsString(roleRepresentation);
StringEntity entity = new StringEntity(convertValue);
response = keycloakUtil.fetchURLResponse(createRoleAPIurl, accessToken, entity);
}

public CloseableHttpResponse fetchURLResponse(String createRoleAPIurl, String accessToken, StringEntity entity)
            throws IOException, ClientProtocolException {
        CloseableHttpResponse response = null;
        try {
            CloseableHttpClient httpclient = HttpClients.createDefault();
            HttpPost postRequest = new HttpPost(url);
            postRequest.addHeader("Authorization", "bearer " + accessToken);
            postRequest.addHeader("content-type", "application/json");
            postRequest.setEntity(entity);
            response = httpclient.execute(postRequest);
        } catch (Exception e) {

        }
        return response;
    }

在这个示例中,查询将被设置为keydape,所以url类似于https://

希望对你有帮助。

 类似资料:
  • 提前,我为这个looong问题道歉!事实上,问题并没有那么长,但是我发布了很多我的代码片段,因为我真的不知道什么与解决我的问题相关或不相关...... 我一直在尝试使用以下内容制作一个简单的poc:-Angular 8前端-用于身份验证的Keycloak服务器-Spring云后端架构:-使用Spring Cloud Security保护的Spring Cloud Gateway-Spring Cl

  • 我正按照文章中的说明,尝试使用keydepeat保护Spring BootREST服务https://medium.com/devops-dudes/securing-spring-boot-rest-apis-with-keycloak-1d760b2004e.我以docker服务的形式启动KeyClope和我的服务(docker compose.yml见下文) 然后,我首先 然后在将环境变量$

  • 我正在使用Spring MVC和REST web服务。当我调用REST服务时,我的Spring MVC控制器将返回一个JSON响应。到目前为止一切都很好。我有一个要求,需要加密spring控制器响应,它是纯文本。 例如:我会打一个REST电话,比如 http://www.AAAAA.com/app/getNameDetails 我的回答是 {"name": "Naveen "," email":

  • 问题内容: 我有一个login.html网页,允许用户输入用户名和密码。当他单击“提交”时,我将使用Javascript收集输入的值,然后对php文件进行Ajax POST调用,然后发送用户名和密码。 我在这里担心的是,这是发送用户名和密码的安全方法吗?如果不是,我如何确保从后端将数据从html文件发送到php的交易的安全性? php文件然后连接到MySql Db并检查用户是否退出以及密码是否正确

  • 我有两个微服务,它们应该相互通信。我的例子是:微服务A向微服务B发出请求。用户不应该有访问权限,只能访问其他微服务。我想,那个解决方案可能是“Http基本身份验证”,所以microservice A还应该向microservice B发送用户名和密码。这很好,但microservice A应该如何找到用户名和密码呢?我正在使用Eureka作为发现服务,但在这种情况下,我没有找到任何可以帮助我的。我

  • 问题内容: 我们在GlassFish 2服务器上部署了一些过时的EJB(EJB3),它们通过@Webmethod批注将其某些方法公开为Web服务。 现在,我们要保护这些Web服务方法的安全性,以便只有经过身份验证的客户端才能调用它。什么是实现这一目标的好方法? 问题答案: 就像好牧师说的那样。以下示例使用文件领域进行身份验证。 您还将需要 sun-ejb-jar.xml 例如 在glassfish