keycloak integração springboot

1. Keycloak O que é isso?

Keycloak é uma moderna orientada aplicações e serviços de open source IAM (Identity and Access Management) solução.

Keycloak fornece single sign-on (SSO), Identidade corretagem e características sociais conta login, Federação usuário, adaptadores de clientes, console de gerenciamento e consoles de gerenciamento de conta. Para mais informações sobre Keycloak, visite a página oficial .

Neste tutorial, vamos usar console de gerenciamento Keycloak configurar e, em seguida, usar o aplicativo Primavera Bota Keycloak adaptador cliente e servidor Keycloak conectado.

2. Instale uma configuração de servidor Keycloak

1. A porção de montagem da referência keycloak9.0.2 integrado modo independente mysql8

2. Criar um Realm

Vamos mover o mouse para navegar para a esquerda canto superior, encontrar o "Adicionar Realm" botão:

Chamamos isso " SpringBoot ":

3. Criar um cliente

Nós precisamos adicionar um aplicativo cliente, por isso clique em "Criar". Nós configuramos o novo ID do cliente como " Product-App ":

Na página seguinte, para os fins deste tutorial, além de "Válido campo redirecionamento URIs", vamos manter todos os valores padrão. Após a configuração, você será redirecionado para a porta 8081 :

Clique em Salvar

4. Crie uma função de usuário e

Keycloak usando Role-Based Access. Portanto, cada usuário deve ter um papel.
Precisamos navegar até a página "Papel":

Então, nós adicionamos " o Utilizador " papel:

Agora que temos um papel pode ser atribuído aos usuários, mas não há um usuário. Então vamos para as novas "Usuários" página com:

Criamos usuário "user1":

Uma vez que o usuário é criado, as informações do usuário irá mostrar aqui:

Digite "Credenciais" guia, e a senha é " 123456" , prestar atenção ao próximo Temporary , clique em Password Reset:

Navegue para os papéis de tabulação e de usuário Atribuir "Role mapeamentos":

3. Criar uma aplicação de Primavera Bota

A fim de proteger o Spring Bootaplicativo, você deve Keycloak Spring Bootadicionar o JAR adaptador para a sua aplicação. Então, você tem que através do normal de Spring Bootconfiguração ( application.propertiespara fornecer alguma configuração adicional). Vamos olhar estes passos.

1. Documentos oficiais de referência

Keycloak Spring BootAdaptador aproveita Spring Booto recurso de configuração automática, assim que você tem a fazer é Keycloak Spring Bootadicionar o motor de arranque para o seu projeto.

Para usar Maven para adicioná-lo, adicione o seguinte para suas dependências em:

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-spring-boot-starter</artifactId>
</dependency>

Adicionar adaptador dependências BOM:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.keycloak.bom</groupId>
      <artifactId>keycloak-adapter-bom</artifactId>
      <version>9.0.2</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

A descrição acima é o material de referência oficial

Criando um springbootprojeto simples incluem o seguinte pacote jar

  • Rede
  • Freemarker
  • Keycloak

2. Criar um projecto springboot

O último pom.xmldocumento é como se segue

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>keycloak-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>keycloak-study</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.keycloak.bom</groupId>
                <artifactId>keycloak-adapter-bom</artifactId>
                <version>9.0.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-spring-boot-starter</artifactId>
            <version>9.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Nosso aplicativo será relativamente simples, contendo apenas duas páginas:

  • A index.html, será a página de login, que contém apenas links para páginas de produtos.
  • product.ftl, Ele será o nosso modelo de página do produto, e só pode ser acessado pelo autenticação do usuário.

Primeiro, criamos um simples "recursos / / src / static" diretório no index.htmlarquivo:

<html>

 <head>
   <title>My awesome landing page</title>
 </head>

 <body>
   <h1>Landing page</h1> <a href="/products">My products</a>
 </body>

</html>

Agora, precisamos de um controlador:

package com.example.keycloakstudy.controller;

import com.example.keycloakstudy.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

@Controller
class ProductController {

    @Autowired
    ProductService productService;

    @GetMapping(path = "/products")
    public String getProducts(Model model){
        model.addAttribute("products", productService.getProducts());
        return "product";
    }

    @GetMapping(path = "/logout")
    public String logout(HttpServletRequest request) throws ServletException {
        request.logout();
        return "/";
    }
}

Você vai achar que isso é simplesmente que define uma página de produto de mapeamento, e em seguida, definir um mapeamento para o cancelamento da operação. Você vai notar também que chamamos de "ProductService", ele irá retornar uma lista de strings, vamos colocar esta lista em Spring MVC Modelo objetos para ir para dentro, por isso temos de criar o serviço:

package com.example.keycloakstudy.service;

import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

@Service
public class ProductService {
    public List<String> getProducts() {
        return Arrays.asList("iPad","iPod","iPhone");
    }
}

Nós também precisamos criar product.ftlum modelo. Para criar este arquivo em "src / recursos / templates" em:

<#import "/spring.ftl" as spring>
<html>
<h1>My products</h1>
<ul>
    <#list products as product>
        <li>${product}</li>
    </#list>
</ul>
<p> <a href="/logout">Logout</a> </p>

</html>

Aqui, nós simplesmente percorrer a Spring MVC Modellista dos produtos sujeitos, e adicionar um registro fora do nosso link do aplicativo.

3. springboot configuração keycloak

Nós precisamos fazer é application.properties adicionar algumas das keycloakpropriedades relacionadas.

Algumas propriedades são um deve ter:

# keycloak安装服务器的IP和端口
keycloak.auth-server-url=http://localhost:8080/auth
# realm名称
keycloak.realm=SpringBoot
keycloak.public-client=true
# clientID名称
keycloak.resource=product-app

Precisamos definir algumas das restrições de segurança, assim como você usar para configurar a aplicação Java EE em tempo web.xml a ser o mesmo:

# 安全约束
keycloak.securityConstraints[0].authRoles[0]=user
keycloak.securityConstraints[0].securityCollections[0].name= common user
keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/products/*

Aqui, nós simplesmente definir cada para / produtos / * iniciou o pedido deverá ser verificada pelo usuário, e o usuário deve ter um "usuário" neste papel.

Agora, só precisamos configurar a última propriedade para garantir que nosso aplicativo será executado na porta 8081:

server.port=8081

A versão final cheio application.propertiesdo seguinte

server.port=8081

# 是否允许HttpServletRequest属性覆盖(隐藏)控制器生成的同名模型属性。
spring.freemarker.allow-request-override=false
# 是否允许HttpSession属性覆盖(隐藏)控制器生成的同名模型属性。
spring.freemarker.allow-session-override=false
# 是否启用模板缓存。
spring.freemarker.cache=false
# 模板编码。
spring.freemarker.charset=UTF-8
# 是否检查模板位置是否存在。
spring.freemarker.check-template-location=true
# Content-Type value.
spring.freemarker.content-type=text/html
# 是否启用freemarker
spring.freemarker.enabled=true
# 设定所有request的属性在merge到模板的时候,是否要都添加到model中.
spring.freemarker.expose-request-attributes=false
# 是否在merge模板的时候,将HttpSession属性都添加到model中
spring.freemarker.expose-session-attributes=false
# 设定是否以springMacroRequestContext的形式暴露RequestContext给Spring’s macro library使用
spring.freemarker.expose-spring-macro-helpers=true
# 是否优先从文件系统加载template,以支持热加载,默认为true
spring.freemarker.prefer-file-system-access=true
# 设定模板的后缀.
spring.freemarker.suffix=.ftl
# 设定模板的加载路径,多个以逗号分隔,默认:
spring.freemarker.template-loader-path=classpath:/templates/
# 设定FreeMarker keys.
spring.freemarker.settings.template_update_delay=0
spring.freemarker.settings.default_encoding=UTF-8
spring.freemarker.settings.classic_compatible=true


# keycloak安装服务器的IP和端口
keycloak.auth-server-url=http://localhost:8080/auth
# realm名称
keycloak.realm=SpringBoot
keycloak.public-client=true
# clientID名称
keycloak.resource=product-app

# 安全约束
keycloak.securityConstraints[0].authRoles[0]=user
keycloak.securityConstraints[0].securityCollections[0].name= common user
keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/products/*

Portanto, estamos configurado, você pode colocar um aplicativo instalado e funcionando!

Para executar este aplicativo Primavera Bota, há muitas maneiras para escolher. Use Maven, você pode simplesmente fazê-lo como este na lista:

mvn clean spring-boot:run

"produtos" de acesso link, você será redirecionado para a página de login Keycloak:

Utilize os nossos usuários "utilizador password /" nome de utilizador e sucesso autenticação de senha deve ser redirecionado para a página do produto, caso contrário ele irá pedir o nome de usuário e senha de erro:

Agora que você já usou Keycloak acrescentou medidas de protecção para o seu primeiro aplicativo Primavera de inicialização.

4. Referência

Guia de Início Rápido Keycloak integração Primavera Bota

Código 5.

Micro Nuvem Baixar

Acho que você gosta

Origin www.cnblogs.com/ifme/p/12591457.html
Recomendado
Clasificación