1. Keycloakそれは何ですか?
Keycloakは、オープンソースIAM(アイデンティティおよびアクセス管理)ソリューションの近代的な指向のアプリケーションやサービスです。
Keycloakは、アイデンティティブローカ・社会的特性は、ログイン、ユーザー連盟、クライアントアダプタ、管理コンソールとアカウント管理コンソールを占め、シングルサインオン(SSO)を提供します。Keycloakの詳細については、下記をご覧ください公式ページを。
このチュートリアルでは、我々は、configureにKeycloak管理コンソールを使用して、春のブートアプリケーションを使用しますKeycloakクライアントアダプタとKeycloakサーバーが接続を。
Keycloakサーバー構成をインストールします。2.
1.基準の取付部keycloak9.0.2スタンドアロンモードmysql8統合しました
2. レルムを作成します。
私たちが見つけ、左上隅に移動し、マウスを動かしてみよう「レルムを追加」ボタンを:
私たちは「それを名付けSpringBoot」:
3. クライアントを作成します。
私たちは、クライアントアプリケーションを追加する必要があるので、私たちは、「作成」をクリックしてください。私たちは、新しい構成されたクライアントIDを「として製品アプリ」:
次のページでは、このチュートリアルの目的のために、「有効なリダイレクトURIの場」に加えて、我々はすべてのデフォルト値を保持します。設定が完了したら、ポートにリダイレクトされます8081:
[保存]をクリックします
ユーザーロールを作成4.と
ロールベースのアクセスを使用してKeycloak。そのため、各ユーザーは役割を持っている必要があります。
私たちは、「役割」のページに移動する必要があります。
その後、私たちは「追加ユーザー」の役割を:
今、私たちは役割をユーザーに割り当てることができていますが、ユーザーが存在しないことを。それでは、と新しい「ユーザー」ページに移動してみましょう:
私たちは、ユーザの作成「USER1」を:
ユーザーが作成されると、ユーザー情報がここに表示されます:
「資格情報」タブ、およびパスワードは「ある入力123456」、近隣には注意を払うをTemporary
、パスワードのリセット]をクリックします。
「ロールマッピング」タブを割り当て、ユーザーの役割に移動します。
3. 春のブートアプリケーションを作成します。
保護するためにはSpring Boot
、アプリケーションを、あなたがしなければならないKeycloak Spring Boot
アプリケーションにアダプターのJARを追加します。その後、あなたは通常の通過に持っSpring Boot
た構成(application.properties
いくつかの追加の設定を提供します)。これらの手順で見てみましょう。
1.公式文書リファレンス
Keycloak Spring Boot
アダプタは、を活用しSpring Boot
、自動設定機能、あなたがしなければならないことですKeycloak Spring Boot
、あなたのプロジェクトにスターターを追加します。
それを追加するためにMavenを使用するには、依存関係にあるに以下を追加します。
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
</dependency>
アダプタ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>
上記は、公式の参考資料であり、
作成springboot
単純なプロジェクトを次のjarパッケージを含めます
- ウェブ
- FreeMarkerの
- Keycloak
プロジェクトspringbootを作成します。2.
最終的にpom.xml
次のように文書があります
<?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>
私たちのアプリケーションは、2つのページを含む、比較的簡単になります。
- A
index.html
、それは製品ページへのリンクのみが含まれているログインページになります。 product.ftl
、それは私たちの製品ページのテンプレートとなり、ユーザ認証だけでアクセスすることができます。
まず、我々は内「/ SRC /リソース/静的」ディレクトリに簡単な作成index.html
ファイルを:
<html>
<head>
<title>My awesome landing page</title>
</head>
<body>
<h1>Landing page</h1> <a href="/products">My products</a>
</body>
</html>
今、私たちは、コントローラが必要になります。
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 "/";
}
}
あなたはこのマッピングの製品ページを定義するだけであることがわかり、その後、操作の取り消しのマッピングを定義します。あなたはまた、我々は、それは文字列のリストを返します、「ProductService」と呼ぶことの通知、我々はSpring MVCのモデルには、このリストを置く、我々はサービスを作成する必要がありますので、内部に行くオブジェクト:
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");
}
}
また、作成する必要がありますproduct.ftl
テンプレートを。「SRC /リソース/テンプレート」の中でこのファイルを作成するには:
<#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>
ここでは、我々は単に通過する Spring MVC Model
製品の件名のリストを、そして私たちのアプリケーションのリンクからログを追加します。
3. springboot設定keycloak
私たちは何をすることです必要があるapplication.properties
いくつかの追加keycloak
の関連するプロパティを。
一部のプロパティは持っている必要があります:
# keycloak安装服务器的IP和端口
keycloak.auth-server-url=http://localhost:8080/auth
# realm名称
keycloak.realm=SpringBoot
keycloak.public-client=true
# clientID名称
keycloak.resource=product-app
私たちは、あなたが同じになるようにweb.xmlの時間でJava EEアプリケーションを構成するために使用するだけのよう、セキュリティの制約のいくつかを定義する必要があります。
# 安全约束
keycloak.securityConstraints[0].authRoles[0]=user
keycloak.securityConstraints[0].securityCollections[0].name= common user
keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/products/*
ここでは、単純に/ *開始された要求は、ユーザによって検証されなければならない/製品ごとに定義し、ユーザーは、この役割の「ユーザー」を持っている必要があります。
今、私たちは私たちのアプリケーションがポート8081上で動作することを保証するために、最後のプロパティを設定する必要があります。
server.port=8081
最後のフルバージョンapplication.properties
、次の
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/*
我々が設定されているので、あなたは、アプリケーション稼働を置くことができます!
この春ブートアプリケーションを実行するには、から選択する多くの方法があります。使用Mavenは、あなたは、単にリスト上でこのようにそれを行うことができます。
mvn clean spring-boot:run
アクセス「製品」リンクを、あなたは、ログインページKeycloakにリダイレクトされます。
それ以外の場合は、ユーザー名とパスワードエラーを要求されます、「ユーザ/パスワード」ログインユーザー名とパスワード認証成功は、製品ページにリダイレクトされなければならない我々のユーザーを使用します。
今、あなたはKeycloakを使用していることを、あなたの最初の春ブートアプリケーションのための保護対策を追加しました。