首页 > 其他分享 >Keycloak详解

Keycloak详解

时间:2023-03-17 18:35:06浏览次数:37  
标签:登录 admin 用户 token 详解 客户端 Keycloak keycloak

简述

  keycloak是一个针对现代应用程序和服务的开源身份和访问管理解决方案,本质就是个中间件,keycloak支持单点登录SSO,服务可通过OpenID Connect、OAuth 2.0 等协议对接 Keycloak

SSO单点登录

  SSO指的是Single Sign On,中文是单点登录。指的是在多个系统上,用户只需登录一次,多个系统都会感知到用户已经登录了

  例如我们打开了天猫和淘宝两个系统页面,我登录了淘宝,转到天猫系统会发现天猫也是登录好的状态

安装

  这里使用docker的方式安装keycloak,这里指定了管理员账号和密码都是admin

docker run -d --name keycloak \
    -p 8080:8080 \
    -e KEYCLOAK_USER=admin \
    -e KEYCLOAK_PASSWORD=admin \
    jboss/keycloak:10.0.0

  启动后可以访问http://localhost:8080/auth/,能访问到就代表安装成功

网页控制台用法

创建领域

  点击Administration Console进行登录

  现在点击Add realm创建一个领域

  输入领域名即可创建一个新的领域

  然后切换到自己创建的领域

创建客户端

  点击clients,然后点create

  输入客户端名字即可进行客户端的创建,然后可进行客户端的配置,这里我创建了Vue-demo客户端

   在下方Access Type中可选择客户端的访问类型

  我们用同样的方式创建后端服务clients,起名叫spring-boot-demo,Access Type中选择bearer-only

  保存好后在Credentials一栏中可以查看Secret,这里的Secret用于配制后端服务

创建角色

  创建两个角色ROLE_ADMIN和ROLE_CUSTOMER

创建用户

  创建2个用户:admin、customer

 

为用户分配角色

  在user的edit界面的Role Mappings可以为用户分配角色

  我们为admin用户分配ROLE_ADMIN角色,为customer用户分配ROLE_CUSTOMER角色

客户端访问类型

public

  适用于客户端应用,且需要浏览器登录的场景。典型的使用场景就是前端web系统,包括采用vue、react实现的前端项目等。

bearer-only

  适用于服务端应用,不需要浏览器登录,只允许使用bearer token请求的场景。典型的使用场景就是restful api。

confidential

  适用于服务端应用,且需要浏览器登录以及需要通过密钥获取access token的场景。典型的使用场景就是服务端渲染的web系统。

keycloak核心概念

  User:用户,指使用并需要登录系统的对象

  Roles:用户角色,指的是用户的类型,例如管理员和超级管理员

  Clients:客户端,指接入keycloak并发起登录请求的服务

  Realms:领域,领域是一批用户、证书、角色的集合,一个用户只能属于并且能登陆到一个域,域之间是互相独立隔离的, 一个域只能管理它下面所属的用户

后端服务接入Keycloak

  我们创建一个springboot后端项目

引入依赖

  我们导入keycloak的依赖

implementation 'org.keycloak:keycloak-core:20.0.5'
implementation 'org.keycloak:keycloak-spring-boot-starter:20.0.5'

spingboot配置  

  配置springboot配置文件

server:
  port: 8082
keycloak:
  realm: demo #领域名
  auth-server-url: http://127.0.0.1:8080/auth
  resource: spring-boot-demo
  ssl-required: external
  credentials:
    secret: 2d2ab498-7af9-48c0-89a3-5eec929e462b #client配置时的密钥
  bearer-only: true #表示此时access type是bearer-only
  use-resource-role-mappings: false
  cors: true #true代表允许跨域访问
  security-constraints: #对于不同角色进行配置不同的路径达到权限管理的目的
    - authRoles: #代表一种角色
        - ROLE_CUSTOMER
      securityCollections: #该角色下的用户,能为该用户配置路径
        - name: customer
          patterns:
            - /customer
    - authRoles:
        - ROLE_ADMIN
      securityCollections:
        - name: admin
          patterns:
            - /admin

  未配置的路径则为可以公开访问

Controller内容

  controller则为普通的路径映射,权限控制由keycloak帮我们做了

@RestController
public class UserController {
    @RequestMapping("/")
    public String index() {
        return "index";
    }

    @RequestMapping("/customer")
    public String customer() {
        return "only customer can see";
    }

    @RequestMapping("/admin")
    public String admin() {
        return "only admin cas see";
    }
} 

  我们可以发现用postman无法正常访问我们在controller写的两个api了,因为我们的后端服务接入了Keycloak,并且路径是在配置文件里配置好的,需要在请求的同时携带token信息才允许访问

用postman模拟登录拿token

  我们可以用postman模拟前端的登录请求拿到token,使用post请求请求下方url

http://127.0.0.1:8080/auth/realms/你配置的realm名/protocol/openid-connect/token

  然后在请求体的参数上,携带四个参数

  发起请求就能拿到token

  然后将token放在postman自带的token配置项,就可以正常访问后端接口

References

https://www.zhihu.com/question/419613516

https://www.zhihu.com/search?type=content&q=SSO%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95

https://juejin.cn/post/6844903973741150215

 

标签:登录,admin,用户,token,详解,客户端,Keycloak,keycloak
From: https://www.cnblogs.com/CNLayton/p/17227361.html

相关文章

  • 详解ResNet 网络,如何让网络变得更“深”了
    摘要:残差网络(ResNet)的提出是为了解决深度神经网络的“退化”(优化)问题。ResNet通过设计残差块结构,调整模型结构,让更深的模型能够有效训练更训练。本文分享自华为云社区......
  • js中的promise详解【转载】
    一、概述Promise是异步编程的一种解决方案,可以替代传统的解决方案--回调函数和事件。ES6统一了用法,并原生提供了Promise对象。作为对象,Promise有以下两个特点:(1)对......
  • k8s架构及服务详解
    k8s架构及服务详解 目录1.1.容器是什么1.2.Namespace1.3.rootfs5.1.Service介绍5.1.1.Serice简介5.1.1.1什么是Service5.1.1.2.Service的创建5.1.1.3.检测......
  • Linux下的tar归档及解压缩功能详解
    (Linux下的tar归档及解压缩功能详解)一、Linux下解压缩工具1.tar命令Unix和类Unix系统上的压缩打包工具,可以将多个文件合并为一个文件,打包后的文件后缀亦为“tar”。tar......
  • 深度学习模型训练和关键参数调优详解
    本文将通过针对特定场景任务从模型选择、模型训练、超参优化、效果展示这四个方面与各位读者分享模型开发的一些心得。参考资料:​​最实用的项目开发全流程!从自建数据集到......
  • Android轻量级数据SparseArray详解
    SparseArray是Android中特有的数据结构,他的几个重要的特点;以键值对形式进行存储,基于二分查找,因此查找的时间复杂度为0(LogN);.由于SparseArray中Key存储的是数组形式,......
  • C# 之 结构体详解
    C#之结构体详解https://blog.csdn.net/Czhenya/article/details/106755779C#之结构体详解一.结构体的定义二.结构体的初始化1.实例构造函数2.静态构造函数三......
  • 万字长文详解声明式配置发展历程
    零、前言​文本仅用于澄清声明式配置技术概述,KCL概念以及核心设计,以及与其他配置语言的对比。一、声明式配置概述​1.1配置的重要性​软件不是一成不变的,每天有成......
  • Object.definePropoty()方法详解
    Object.definePropoty()方法有三个参数第一个参数为:需要进行代理的目标对象,target第二个参数为:需要代理的这个对象中对应的"键"名,key第三个参数为:{}一个配置项......
  • Linux根目录详解
    /  根目录:根目录,文件的最顶端,整个文件系统的根目录/bin  用户二进制文件:存放系统所需的重要命令/sbin  系统二进制文件:存放一些系统管理的命令,一般只能由超级......