Keycloak 13 自定客户身份验证步骤(User Storage SPI)

Keycloak

版本号:13.0.0

spring-boot 新项目 GitHub
user-storage-spi 新项目 Github

详细介绍

Keycloak 是为当代应用软件和服务项目给予的一个开源系统的真实身份和浏览管理方法的解决方法。

Keycloak 在接口测试能够 应用嵌入数据库查询,工作环境必须重新部署数据库查询。下列将一一详细介绍怎么使用嵌入数据库查询、重新部署数据库查询。

尤其必须留意 Keycloak 是在 WildFly 上搭建的。

文件目录
  • Keycloak
    • 详细介绍
    • 安裝
      • 系统要求
      • 文件目录构造
      • 应用 Docker 安裝 Keycloak
    • 应用
      • 建立 realm 和 客户
        • 建立 realm
        • 建立客户
        • 新创建账号登录控制面板
    • Spring-Boot 验证
      • 申请注册手机客户端到 Keycloak 中
        • 验证
          • Bearer 动态口令
          • 复位浏览动态口令
          • 申请注册浏览动态口令
          • Keycloak Representations
          • Keycloak 电源适配器配备
          • OIDC 动态性手机客户端申请注册
          • 手机客户端申请注册对策
      • 管理方法手机客户端
        • OIDC 手机客户端
          • 建立 OIDC 手机客户端
    • 应用外界数据库查询
      • 客户储存 SPI
        • 装包和布署
        • 自定客户储存 Provider
        • Spring-boot 应用外界用户认证
    • Keycloak 人物角色
      • 应用数据库查询账号登录

安裝

系统要求

  • Java8 JDK
  • 最少 512M 运行内存
  • 最少 1G 硬盘
  • 假如要设定 Keycloak 群集则必须数据库查询,例如:PostgreSQL、Oracle、MySQL 等
  • 假如要运作群集,必须互联网适用广播节目。自然还可以不用,只不过是必须变更一堆配备

文件目录构造

  • bin/ —— 各种各样运行服务项目、网络服务器上实行管理方法的脚本制作
  • domain/ —— 群集方式下的环境变量和工作中文件目录
  • modules/ —— 服务项目应用的 Java 包
  • standalone/ —— 单机版方式下的环境变量和工作中文件目录
  • standalone/deployments/ —— 你自定的拓展文档
  • themes/ —— 页面主题风格文档

应用 Docker 安裝 Keycloak

  1. 运行器皿

    docker run -p 10010:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:13.0.0
    
  2. 取得成功运行后浏览:http://127.0.0.1:10010/

  3. 登陆 Keycloak 服务项目

    a. 点一下 Administration Console

    b. 键入账户:admin,登陆密码:admin

    c. 进到控制面板页面

应用

建立 realm 和 客户

建立一个 realm 和客户以浏览内嵌的账号管理控制面板。把 realm 想像成租赁户的定义。

  • Master realm —— 这一 realm 是复位时建立的,它包括超级用户。应用这一 realm 管理方法其他的 realm。
  • Other realm —— 超级用户建立的 realm 。在这种 realm 里,超级用户建立客户和应用软件,客户有着应用软件。

建立 realm

  1. 点一下 Add realm 按键

  2. 键入 realm 名字

  3. 点一下 create 按键进行建立
    点一下建立进行 demo realm 建立。

建立客户

  1. 转换 realm 到 Demo

  2. 建立客户,Users -> Add User,键入 Username ,点一下 Save 按键

  3. 密码设置

新创建账号登录控制面板

  1. 撤出 admin 账号登录
  2. 详细地址键入:http://127.0.0.1:10010/auth/realms/demo/account/,点一下 Sign In 按键,应用新创建的客户 Zhang 登陆
  3. 设置新密码
  4. 登录成功

Spring-Boot 验证

申请注册手机客户端到 Keycloak 中

应用软件或服务项目为了更好地能应用 Keycloak,务必在 Keycloak 中申请注册一个手机客户端。能够 根据超级用户页面申请注册,手机客户端还可以自身根据 Keycloak 服务项目申请注册。

手机客户端申请注册服务项目给予内嵌适用:Keycloak Client Representations、OIDC 手机客户端数据库、SAML 实体线叙述。手机客户端申请注册服务项目详细地址是:/auth/realms/<realm>/clients-registrations/<provider>

内嵌的 provider

  • default —— Keycloak Client Representation(JSON)
  • install —— Keycloak Adapter Configuration(JSON)
  • openid-connect —— OIDC 手机客户端数据库叙述(JSON)
  • saml2-entity-descriptor —— SAML 实体线叙述者(XML)

验证

启用手机客户端申请注册服务项目必须动态口令。动态口令能够 是 bearer 动态口令,复位浏览动态口令或是申请注册动态口令。不用动态口令申请注册手机客户端还可以,可是必须配备手机客户端申请注册对策。

Bearer 动态口令

Bearer 动态口令能够 意味着客户或是服务项目帐户。启用节点必须下列管理权限:

  • create-client 或是 manage-client —— 建立手机客户端
  • view-client 或是 manage-client —— 查询手机客户端
  • manage-client —— 升级或是删掉手机客户端

假如应用 Bearer 动态口令建立手机客户端,强烈推荐应用来源于服务项目帐户(create-client 人物角色)的动态口令。

复位浏览动态口令

强烈推荐应用复位浏览动态口令申请注册手机客户端。复位浏览动态口令只有用以建立手机客户端,而且能够 配备有效期限,另外能够 配备能够 建立是多少手机客户端。

复位浏览动态口令能够 根据超级用户控制面板建立。

点一下储存,进行动态口令的建立。

当点一下储存之后会转化成动态口令,这一动态口令假如忘掉拷贝了,那麼就只有再次建立了。应用 bearer 动态口令:

Authorization: bearer eyJhbGciOiJSUz...
申请注册浏览动态口令

当根据手机客户端申请注册服务项目建立手机客户端时,传参会包括一个申请注册浏览动态口令。申请注册浏览动态口令给予查找手机客户端配备、升级或是删掉手机客户端的管理权限。申请注册浏览动态口令应用方法和 bear 动态口令、复位浏览动态口令的应用方法是一样的。申请注册浏览动态口令是一次性的,当它应用时,传参里总是会包括一个新的动态口令。

假如手机客户端在手机客户端申请注册服务项目以外建立,申请注册浏览动态口令就不容易和手机客户端关系起来了。但能够 在超级用户控制面板转化成申请注册浏览动态口令。

Keycloak Representations

default 手机客户端申请注册服务提供商能够 建立、查找、升级、删掉手机客户端。应用 Keycloak Client Representation 变换给予配备手机客户端适用,如同在超级用户控制面板配备的一样。

建立 Client Representation(JSON)实行 HTTP POST 要求 /auth/realms/<realm>/clients-registrations/default

查找 Client Representation 实行 GET 要求/auth/realms/<realm>/clients-registrations/default/<client id>

它也会回到新的申请注册浏览动态口令。

要升级 Client Representation 实行 HTTP PUT 要求 /auth/realms/<realm>/clients-registrations/default/<client id>

它也会回到一个新的申请注册浏览动态口令。

要删掉 Client Representation 实行 HTTP DELETE 要求 /auth/realms/<realm>/clients-registrations/default/<client id>

Keycloak 电源适配器配备

installation 手机客户端申请注册服务提供商能够 用以为手机客户端获得电源适配器配备。除开动态口令身份认证以外,还能够应用 HTTP basic 验证(根据手机客户端凭据)。应用以下请求头以进行 HTTP basic 验证:

Authorization: basic BASE64(client-id   ':'   client-secret)

要获得电源适配器配备实行 HTTP GET 要求:/auth/realms/<realm>/clients-registrations/install/<client id>

公共性手机客户端不用身份验证。这代表着 JavaScript 电源适配器能够 根据之上 URL 立即从 Keycloak 载入手机客户端配备。

OIDC 动态性手机客户端申请注册

终端设备在 Keycloak 中申请注册手机客户端 /auth/realms/<realm>/clients-registrations/openid-connect[/<client id>]

在 OIDC 发觉中能够 为 realm 寻找终端设备,/auth/realms/<realm>/.well-known/openid-configuration

手机客户端申请注册对策

Keycloak 当今适用二种方法申请注册手机客户端(根据手机客户端申请注册服务项目)。

  • 验证要求 —— 申请注册手机客户端要求要不包括复位浏览动态口令,要不包括 Bearer 动态口令
  • 密名要求 —— 申请注册手机客户端不用包括一切动态口令

密名手机客户端申请注册要求是十分有意思和强劲的作用,所有人都能够申请注册手机客户端而且沒有限定。因而明确提出了手机客户端申请注册对策 SPI,它给予了一个限定的方法(谁可以申请注册,在什么标准下)。

在 Keycloak 超级用户控制面板中,你能见到密名要求对策配备和验证要求对策配备。

当今适用的对策:

  • Trusted Hosts Policy —— 能够 配备信赖的 host 和网站域名。默认设置的,沒有授权管理 host,因此 密名手机客户端申请注册事实上是禁止使用的。
  • Consent Required Policy —— 刚注册的的手机客户端 Consent Allowed 电源开关是运行的。因此 身份验证取得成功后,客户将见到准予对话(假如需要的话)。
  • Protocol Mapper Policy —— 容许配备协议映射完成授权管理。
  • Client Scope Policy —— 容许 Client Scopes 授权管理,用以刚注册的的手机客户端或是升级的手机客户端。
  • Full Scope Policy —— 刚注册的的手机客户端 Full Scope Allowed电源开关是关掉的。寓意这这种手机客户端沒有一切 realm 人物角色或是手机客户端人物角色。
  • Max Clients Policy —— 假如申请注册的手机客户端总数在 realm 中大于或等于预设值将被驳回申诉。初始值 200。
  • Client Disabled Policy —— 刚注册的手机客户端是禁止使用的。代表着超级用户必须手动式根据和开启刚注册的的手机客户端。这一对策默认设置不开启。

管理方法手机客户端

手机客户端是客户要求身份验证的实体线。手机客户端有二种文件格式。第一种是单点登陆的(SSO)。另一种是种类是获得浏览动态口令随后意味着客户浏览服务项目。

OIDC 手机客户端

建立 OIDC 手机客户端
  1. 手机客户端目录

  2. 加上手机客户端,Client ID 是手机客户端的真实身份标志。下一步挑选手机客户端协议书 openid-connect

    Client ID
    数据信息英文字母字符串数组,用以手机客户端身份核查(当 OIDC 要求时)。

    Name
    手机客户端名字。

    Description
    手机客户端叙述。

    Enabled
    假如关掉,手机客户端将不允许要求认证。

    Consent Required
    假如开启,客户将获得一个准予网页页面(用以了解客户是不是受权应用软件浏览)。网页页面另外表明手机客户端要浏览的元数据信息,客户能够 见到手机客户端要浏览的信息内容。

    Access Type
    OIDC 手机客户端种类。

    • confidential:商业秘密浏览种类用以服务器端手机客户端(必须实行浏览器登录和必须手机客户端登陆密码)。这一种类用以服务器端应用软件。
    • public:Public 浏览种类是手机客户端种类手机客户端(必须实行浏览器登录)。手机客户端种类应用软件沒有安全性储存密秘的方法。反过来,根据为手机客户端配备恰当的跳转 URI 来限定浏览十分关键。
    • bearer-only:Bearer-only 浏览种类代表着应用软件仅容许 bearer 动态口令要求。假如开启这一,应用软件不可以参加浏览器登录。

    Standard Flow Enabled
    假如开启这一,手机客户端将应用 OIDC 授权码工作流引擎。

    Implicit Flow Enabled
    假如开启这一,手机客户端将应用 OIDC 隐式工作流引擎。

    Direct Access Grants Enabled
    假如开启这一,手机客户端将应用 OIDC 立即浏览受权。

    OAuth 2.0 Device Authorization Grant Enabled
    假如开启这一,手机客户端将应用 OIDC 机器设备受权批准。

    OpenID Connect Client Initiated Backchannel Authentication Grant Enabled
    假如开启这一,手机客户端将应用 OIDC 手机客户端复位后端开发方式验证批准。

    Root URL
    假如 Keycloak 不应用一切相对性 URL,这一值便是预埋值。

    Valid Redirect URIs
    这个是选填字段名。键入 URL 免费模板随后点一下 号加上。点一下 - 号清除 URL。记牢,最终也要点一下 Sava 按键。使用通配符 * 只有用以 URI 的尾端,比如:http://host.com/*

    申请注册跳转 URL 免费模板时,你应该考虑到防止黑客攻击。

    Base URL
    假如 Keycloak 要连接手机客户端,这一值必须设定。

    Admin URL
    为 Keycloak 特定手机客户端电源适配器,这一值是手机客户端回调函数终端设备。Keycloak 服务项目将应用这一 URI 回调函数(例如:消息推送撤销对策、实行后端开发方式退出登录、其他超级用户实际操作)。针对 Keycloak servlet 电源适配器而言,这一值是 servlet 应用软件的 root URL。

    Web Origins
    这一设定是以 CORS 为管理中心。

  3. 保密工作客户端证书
    假如手机客户端 access type 设定为 confidential 时,网页页面可能表明 Credentials 标识。留意,挑选 Confidential 标识要储存之后才会能见到 Credentials标识。

    Client Authenticator 下拉列表指定你的数据加密客户端证书种类。默认设置是 Client Id and Secret。secret 自动生成,而且 Regenerate Secret 按键能够 再次转化成 secret。

    除此之外,能够 挑选 Signed Jwt 或是 X509 Certificate 认证替代 secret。

    Signed JWT

    当挑选 Signed Jwt 种类时,你需要为手机客户端转化成公钥和资格证书。公钥用以 JWT 签字,资格证书用以服务器端认证签字。点一下 Generate new keys and certificate 按键转化成公钥和资格证书。

    还可以应用其他专用工具转化成,随后导进。

  4. 新创建 Spring-boot 新项目

  5. 建立 Keycloak 手机客户端,导航栏到 http://127.0.0.1:10010/,转换到 Demo realm ,点一下 Clients 莱单,点一下 Create 按键,建立一个 Demo realm 下的手机客户端。手机客户端 ID 为:spring-boot-toy。挑选 Access Typeconfidential

  6. 建立人物角色 toy-admin,并给客户授予人物角色


  7. Spring 新项目加上 Maven 引入

    <?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.3.10.RELEASE</version>
             <relativePath/> <!-- lookup parent from repository -->
         </parent>
         <groupId>com.toy.keycloak</groupId>
         <artifactId>toy-keycloak</artifactId>
         <version>0.0.1-SNAPSHOT</version>
         <name>toy-keycloak</name>
    
         <properties>
             <java.version>1.8</java.version>
         </properties>
         <dependencies>
             <dependency>
                 <groupId>org.keycloak</groupId>
                 <artifactId>keycloak-spring-boot-starter</artifactId>
             </dependency>
    
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-devtools</artifactId>
                 <scope>runtime</scope>
                 <optional>true</optional>
             </dependency>
             <dependency>
                 <groupId>org.projectlombok</groupId>
                 <artifactId>lombok</artifactId>
                 <optional>true</optional>
             </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>
    
         <dependencyManagement>
             <dependencies>
                 <dependency>
                     <groupId>org.keycloak.bom</groupId>
                     <artifactId>keycloak-adapter-bom</artifactId>
                     <version>13.0.0</version>
                     <type>pom</type>
                     <scope>import</scope>
                 </dependency>
             </dependencies>
         </dependencyManagement>
    
         <build>
             <plugins>
                 <plugin>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-maven-plugin</artifactId>
                     <configuration>
                         <excludes>
                             <exclude>
                                 <groupId>org.projectlombok</groupId>
                                 <artifactId>lombok</artifactId>
                             </exclude>
                         </excludes>
                     </configuration>
                 </plugin>
             </plugins>
         </build>
    
     </project>
    
    
  8. 曝露 Api 插口

     package com.toy.keycloak.webapi;
    
     import org.springframework.web.bind.annotation.GetMapping;
     import org.springframework.web.bind.annotation.RequestMapping;
     import org.springframework.web.bind.annotation.RestController;
    
     /**
     * @author Zhang_Xiang
     * @since 2021/5/11 16:56:57
     */
     @RestController
     @RequestMapping("temp")
     public class TempController {
    
         @GetMapping("weather")
         public String weather(){
             return "大晴天☀️";
         }
    
     }
    
    
  9. 配备

    应用 Tomcat、Undertow、Jetty 不用附加配备。在 application.properties 中配备 Keycloak 以下:

     keycloak.realm=demo  # realm 名字
     keycloak.auth-server-url=http://127.0.0.1:10010/auth   # Keycloak 基础服务详细地址
     keycloak.ssl-required=external
     keycloak.resource=spring-boot-toy   # 应用软件手机客户端 ID
     keycloak.credentials.secret=91437668-b8f8-425b-ba9d-38439115dfbc
     keycloak.use-resource-role-mappings=true
     keycloak.securityConstraints[0].authRoles[0]=toy-admin
     keycloak.security-constraints[0].securityCollections[0].patterns[0]=/*
    

    设定 keycloak.enabled = false 能够 停止使用 Keycloak 。

  10. 运行 Spring 应用软件,并浏览 http://localhost:8080/temp/weather

    键入登录名 zhang,登陆密码123456

  11. 管理方法登陆客户对话,账号登录后,进到 Keycloak 后台管理系统,转换到 Demo realm 能够 见到现阶段登陆的对话目录。

    点一下 Logout all 按键,全部客户都将退出登录。

应用外界数据库查询

Keycloak 嵌入了 H2 内存数据库。Keycloak 默认设置应用 H2 分布式锁数据信息。H2 数据库查询不适感用以分布式系统情景而且不适感用以群集。

Keycloak 应用双层技术性分布式锁关系数据。最底层技术性是 JDBC。JDBC 用以联接 RDBMS。每一个数据库查询服务提供商都是有不一样的 JDBC 驱动器。高层技术性用以分布式锁的是 Hibernate JPA。

客户储存 SPI

应用客户储存 SPI 拓展 Keycloak 以联接外界客户数据信息和资格证书储存。当 Keycloak 运作时搜索客户时,例如账号登录,Keycloak 实行好多个流程精准定位客户。最先看客户是在在客户缓存文件中,随后在本地数据库中搜索,假如找不着,循环系统客户储存 SPI 实行搜索。

客户储存 SPI 服务提供商完成装包和布署和 Java EE 部件类似。默认设置不开启部件,假如要开启必须在 Keycloak 超级用户控制面板页面中配备 User Feberation

装包和布署

客户储存服务提供商装包为 JAR 随后布署到 Keycloak 运作时或是从 Keycloak 运作时撤销布署,如同 WildFly 应用软件服务项目布署服务项目一样。你也能够 立即复制 JAR 包到 standalone/deployments/ 网络服务器文件目录,或是应用 JBoss CLI 实行布署。

为了更好地 Keycloak 能鉴别服务供应商,你需要加上一个文档到 JAR 库中:META-INF/services/org.keycloak.storage.UserStorageProviderFactory。这一文档务必包括完成 UserStorageProviderFactory 类的全途径:

org.keycloak.examples.federation.properties.ClasspathPropertiesStorageFactory
org.keycloak.examples.federation.properties.FilePropertiesStorageFactory

自定客户储存 Provider

应用现有客户数据库查询。

MysqlUserStorageProvider 完成了许多插口,完成 UserStorageProvider 是完成是 SPI 的基本上规定,也就是说,不完成 UserStorageProvider 就不可以完成 SPI,UserLookupProvider 用以完成从外界数据库查询搜索客户以完成账号登录,UserQueryProvider 界定繁杂查看以搜索客户,CredentialInputValidator 认证不一样的资格证书种类(例如:认证账户密码)。

  1. provider

    public class MysqlUserStorageProvider implements UserLookupProvider, UserQueryProvider, CredentialInputValidator, UserStorageProvider {
    
        protected KeycloakSession session;
        protected ComponentModel model;
    
        public MysqlUserStorageProvider(KeycloakSession session, ComponentModel model) {
            this.session = session;
            this.model = model;
        }
    
        ...
    }
    
    
  2. ProviderFactory,这儿的 ProviderConfigProperty 用以自定义标签,也就是说,在这儿界定了标识之后,能够 在 Keycloak 管理方法页面设定值,编码能够 立即载入到这种值。加上自定 SPI 时,要注意加上在什么 realm 下。

    public class MysqlUserStorageProviderFactory implements UserStorageProviderFactory<MysqlUserStorageProvider> {
    
    protected final List<ProviderConfigProperty> configMetadata;
    
    public MysqlUserStorageProviderFactory() {
        configMetadata = ProviderConfigurationBuilder.create()
                .property()
                .name(CONFIG_KEY_JDBC_DRIVER)
                .label("JDBC Driver Class")
                .type(ProviderConfigProperty.STRING_TYPE)
                .defaultValue("org.h2.Driver")
                .helpText("Fully qualified class name of the JDBC driver")
                .add()
                .property()
                .name(CONFIG_KEY_JDBC_URL)
                .label("JDBC URL")
                .type(ProviderConfigProperty.STRING_TYPE)
                .defaultValue("jdbc:h2:mem:customdb")
                .helpText("JDBC URL used to connect to the user database")
                .add()
                .property()
                .name(CONFIG_KEY_DB_USERNAME)
                .label("Database User")
                .type(ProviderConfigProperty.STRING_TYPE)
                .helpText("Username used to connect to the database")
                .add()
                .property()
                .name(CONFIG_KEY_DB_PASSWORD)
                .label("Database Password")
                .type(ProviderConfigProperty.STRING_TYPE)
                .helpText("Password used to connect to the database")
                .secret(true)
                .add()
                .property()
                .name(CONFIG_KEY_VALIDATION_QUERY)
                .label("SQL Validation Query")
                .type(ProviderConfigProperty.STRING_TYPE)
                .helpText("SQL query used to validate a connection")
                .defaultValue("select 1")
                .add()
                .build();
    }
    
    @Override
    public MysqlUserStorageProvider create(KeycloakSession session, ComponentModel model) {
        return new MysqlUserStorageProvider(session, model);
    }
    
    @Override
    public String getId() {
        return "user-center-provider";
    }
    
    @Override
    public List<ProviderConfigProperty> getConfigProperties() {
        return configMetadata;
    }
    
    @Override
    public void validateConfiguration(KeycloakSession session, RealmModel realm, ComponentModel config) throws ComponentValidationException {
        try (Connection c = DbUtil.getConnection(config)) {
            System.out.println(config.get(CONFIG_KEY_VALIDATION_QUERY));
            c.createStatement().execute(config.get(CONFIG_KEY_VALIDATION_QUERY));
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            throw new ComponentValidationException("Unable to validate database connection", ex);
        }
    }
    }
    


  3. 查询客户目录

Spring-boot 应用外界用户认证

  1. application.properties

     keycloak.realm=demo
     keycloak.auth-server-url=http://127.0.0.1:10010/auth
     keycloak.ssl-required=external
     keycloak.resource=spring-boot-toy
     keycloak.credentials.secret=91437668-b8f8-425b-ba9d-38439115dfbc
     keycloak.use-resource-role-mappings=true
     keycloak.verify-token-audience=true
     keycloak.securityConstraints[0].authRoles[0]=user
     keycloak.security-constraints[0].securityCollections[0].patterns[0]=/temp/weather
    
    • resource:手机客户端 ID
    • use-resource-role-mappings:当设定为 true 时,OIDC Java 电源适配器将 Token 中搜索应用软件财号人物角色投射。设定为 false 时,将从 realm 里搜索客户人物角色投射。默认为 false。
    • ssl-required:保证全部和 Keycloak 通信的要求是 HTTPS,工作环境应设定为 all,初始值是 external,即外界要求必须 HTTPS,可选值是:allexternalnone
    • verify-token-audience:设定为 true 时,Bearer Token 开展身份验证时,电源适配器会认证动态口令是不是包括手机客户端名字。开启将改进安全系数(强烈推荐)。

Keycloak 人物角色

一个 Realm 有好几个手机客户端,一个手机客户端有好几个客户。在 Keycloak 有3种人物角色:

  • Realm Role:全局性人物角色,归属于特定 realm。一切手机客户端都能够浏览这一人物角色,而且把这个人物角色投射到一切客户。
  • Client Role:归属于特定手机客户端的人物角色。只有投射到该手机客户端下的客户。
  • Composite Role:好几个人物角色的组成。

在手机客户端设定中开启 Service Accounts Enabled,在 demo Realm 中加上 ordinary_user 人物角色。

Service Account Roles 标识中加上 ordinary_user 人物角色。

加上该人物角色之后,转换到 User 标识,能够 见到客户中早已关系了人物角色。

应用数据库查询账号登录

  1. 加上人物角色限定 ordinary_user

    keycloak.realm=demo
    keycloak.auth-server-url=http://127.0.0.1:10010/auth
    keycloak.ssl-required=external
    keycloak.resource=spring-boot-toy
    keycloak.credentials.secret=91437668-b8f8-425b-ba9d-38439115dfbc
    keycloak.use-resource-role-mappings=true
    keycloak.verify-token-audience=true
    keycloak.securityConstraints[0].authRoles[0]=toy-admin
    keycloak.security-constraints[0].auth-roles[1]=ordinary_user
    keycloak.security-constraints[0].securityCollections[0].patterns[0]=/temp/weather
    
  2. 运行服务项目,浏览 localhost:8080/temp/weather,键入自定数据库查询中的客户、登陆密码,以浏览插口。

评论(0条)

刀客源码 游客评论