什么是Keycloak?怎么样使用Keycloak实现登录和权限验证?

news2024/11/18 1:51:08

什么是Keycloak?怎么样使用Keycloak实现登录和权限验证?

文章目录

  • 什么是Keycloak?怎么样使用Keycloak实现登录和权限验证?
  • Open Source Identity and Access Management(开源身份和访问管理)
    • 1、支持的协议:
    • 2、安装与部署
      • 2.1、在windows本地安装
      • 2.2、在docker安装部署
    • 3、keycloak使用--登录权限验证
      • 3.1、首先使用管理员账号密码登录
      • 3.2、创建realm
      • 3.3、创建clients
      • 3.4、创建角色
      • 3.5、创建用户
      • 3.6、对象关系映射
    • 4、在springboot项目中整合keycloak
      • 4.1、创建html文件,设置对应的访问权限来访问
      • 4.2、创建Controller接口类
      • 4.3、applicaiotn.yml配置文件
    • 5、启动项目
      • 5.1、访问公共页面
      • 5.2、访问用户页面
      • 5.3、访问admin页面
    • 6、踩坑!!!

keycloak官方网站: https://www.keycloak.org/

Open Source Identity and Access Management(开源身份和访问管理)

image-20240514140226792

Keycloak是一个开源的身份和访问管理解决方案,它提供了诸如单点登录(SSO)多因素认证用户管理权限管理等功能。Keycloak可以帮助开发人员轻松地集成身份验证和授权功能到他们的应用程序中,而无需自己编写复杂的身份验证和授权逻辑

1、支持的协议:

Keycloak支持多种协议,其中一些主要的协议包括:

  1. OAuth 2.0:OAuth 2.0是一种开放标准的授权框架,用于授权第三方应用访问用户资源。Keycloak使用OAuth 2.0协议来实现授权码授权、密码授权、客户端凭证授权等授权流程。

  2. OpenID Connect:OpenID Connect是建立在OAuth 2.0之上的身份验证协议,用于验证用户身份并提供用户信息。Keycloak支持OpenID Connect协议,可以用于实现身份验证和单点登录。

  3. SAML:Security Assertion Markup Language(SAML)是一种基于XML的标准,用于在身份提供者和服务提供者之间交换认证和授权信息。Keycloak可以充当SAML身份提供者和服务提供者,实现单点登录和身份验证。

  4. LDAP:Lightweight Directory Access Protocol(LDAP)是一种用于访问和维护分布式目录服务的协议。Keycloak可以集成LDAP作为用户存储,实现用户认证和授权。

  5. Kerberos:Kerberos是一种网络身份验证协议,用于在不安全的网络中安全地认证用户和服务。Keycloak可以集成Kerberos,实现基于票据的身份验证。

  6. Social Login:Keycloak还支持社交登录,可以通过集成第三方身份提供者(如Google、Facebook、GitHub等)实现用户身份验证和授权。

它支持多种身份验证方式,包括用户名密码、LDAP、Active Directory、社交登录等。Keycloak还提供了一个直观的管理界面,方便管理员配置和管理用户、角色和权限。

2、安装与部署

官方手册网址:https://www.keycloak.org/guides

image-20240514140335749

在官网中提供了许多的部署方式,文档很详细,可以根据文档进行操作,很方便。

2.1、在windows本地安装

  1. 下载资源:keycloak-24.0.4.zip

  2. 解压到本地,安装即成功。

    image-20240514140901963

  3. 使用命令行启动

    bin\kc.bat start-dev
    

    image-20240514141052353

  4. 访问http://localhost:8080

    image-20240514141214351

2.2、在docker安装部署

docker部署文档

命令:

docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:24.0.4 start-dev

上述命令就是将docker部署并且进行启动,并设置管理员的用户名和密码都为admin,到时候可以登录查看。

访问http://localhost:8080即可。

3、keycloak使用–登录权限验证

3.1、首先使用管理员账号密码登录

(均为admin,或是自己设置)

image-20240514141737044

3.2、创建realm

image-20240514141842239

我创建的realm名为client

3.3、创建clients

image-20240514142029688

  1. 取名(Client ID)

    image-20240514142140265

    image-20240514142424649

  2. 设置重定向URIs

    image-20240514142711177

然后就可以在Clients list看见刚刚创建的client了

image-20240514142802227

3.4、创建角色

image-20240514142957339

image-20240514143027197

3.5、创建用户

image-20240514143125050

image-20240514143250277

image-20240514143411310

image-20240514143507288

3.6、对象关系映射

image-20240514143746995

image-20240514143807338

image-20240514143824663

4、在springboot项目中整合keycloak

4.1、创建html文件,设置对应的访问权限来访问

文件存在templates中:

image-20240514145308916

admin.html(只有管理员权限才能访问)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>这里是管理员页面,只有admin权限才能访问</h1>
</body>
</html>

index.html(用户,管理员,游客均可访问)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>这里是公共页面!</h1>
</body>
</html>

user.html(只有管理员和用户才能访问)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>这里是用户页面,拥有user、admin可访问!</h1>
</body>
</html>

4.2、创建Controller接口类

package com.pzhu.keycloak;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/publicPage")
    public String home() {
        return "index";
    }

    @GetMapping("/user")
    public String user() {
        return "user";
    }

    @GetMapping("/admin")
    public String admin() {
        return "admin";
    }
}

4.3、applicaiotn.yml配置文件

在下面的配置文件中需要主要需要配置的是realm(你创建的realm的名称),resource(Clients 的id名称), credentials secret(你的Clients的密钥),其他都是固定的,可以照搬我下面的配置文件。

server:
  port: 8081

keycloak:
  realm: client  #域名
  resource: kc-springboot  #客户端id
  auth-server-url: http://localhost:8080 #对应的是keycloak的路径
  ssl-required: external
  public-client: false  #非public访问类型
  credentials:
    secret: bY7DnihsW2cMMLhnYQjyhLS0xk7479j5 #秘钥(来源于Client)
  securityConstraints:
    - auth-roles:  # 公共页面 无权限可访问
      security-collections:
        - name: any
        - patterns:
            - /publicPage

    - auth-roles: # 要user或者admin权限才可访问
        - user
        - admin
      security-collections:
        - name: user page
        - patterns:
            - /user

    - auth-roles: # 需要admin权限才能访问
        - admin
      security-collections:
        - name: admin
        - name: admin
          patterns:
            - /admin
spring:
  application:
    name: keycloak

其中,secret密钥来源于:

image-20240514145848247

5、启动项目

5.1、访问公共页面

image-20240514150454489

5.2、访问用户页面

访问路径http://localhost:8081/user就可以进入user页面,但是此页面只有用户和管理员身份才能访问,现在就跳转到keycloak的登录页面进行登录验证,输入我们的用户名(使用上述创建的user02用户和密码)。

image-20240514151109140

登录之后:image-20240514151152292

将路径切换为http://localhost:8081/admin来访问admin页面,并验证权限,现在是user角色登录,所以登录权限不够(报403错误,权限不足)

image-20240514151901630

5.3、访问admin页面

必须使用admin权限的用户才能访问admin页面

访问admin页面:http://localhost:8081/admin。

使用创建,并具有admin角色的用户登录:

image-20240514152047802

可以访问:

image-20240514152206468

项目整合参考文章:https://blog.csdn.net/mltaozi/article/details/128033902

项目源码:https://pan.baidu.com/s/1Lxn1R1PtRFcxyD8Biw_2Pg?pwd=axqo

6、踩坑!!!

根据网上博主的分享和官方的文档,上述操作是可以实现的,但是在我创建之后发现报错,只能访问公共页面,登录之后admin连user.html都不能访问,报错就是权限的问题。

网页报错

image-20240514154243790

控制台报错

2023-12-18 16:23:10,874 ERROR [org.wildfly.security.http.oidc] (default task-6) status from server: 400
2023-12-18 16:23:10,874 ERROR [org.wildfly.security.http.oidc] (default task-6)    {"error":"invalid_grant","error_description":"Incorrect redirect_uri"}

于是找了很久,去github上看了看,发现了问题:文章链接https://github.com/keycloak/keycloak/discussions/25684。

那个大佬是这样说的:

image-20240514154043996

翻译:是的!这是iss,如果你看到两个redirect_uri只是因为iss参数而不同。转到您的客户端,在“高级”选项卡中将“从身份验证响应中排除颁发者”设置为“打开”。

这个问题与redirect_uri验证中的更改无关,而是与规范引入的新iss参数有关。您的客户端不会将其从uri中删除。

然后我就**在“高级”选项卡中将“从身份验证响应中排除颁发者”设置为“打开”**然后就可以访问了。

  1. 选择clients:

    image-20240514154630089

  2. 选择advanced:

    image-20240514154745925

  3. 打开“从身份验证响应中排除颁发者”

    image-20240514154850124

现在就可以登录拉!困扰很久的WTF!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1676060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 Mac 上恢复已删除的文件

点击“删除”后立即后悔&#xff1f;不用担心。我们的教程介绍了如何恢复已删除的 Mac 文件、电子邮件、iTunes 音乐等&#xff0c;即使您没有 Time Machine 备份并且无需支付软件费用。 在 macOS 中丢失文件可能会非常痛苦&#xff0c;如果您是点击删除的人&#xff0c;情况会…

稳定网络的诀窍:静态住宅代理解决方案

在数字化时代&#xff0c;网络稳定性对于个人和企业都至关重要。然而&#xff0c;由于多种因素的影响&#xff0c;如地理位置、网络拥堵或网络安全问题等&#xff0c;网络稳定性常常受到挑战。为了应对这些挑战&#xff0c;静态住宅代理作为一种高效且可靠的网络解决方案&#…

c++ 各版本特性介绍

c C是一种高级编程语言&#xff0c;以其强大的功能、灵活性和高效性而闻名。它是由Bjarne Stroustrup在20世纪80年代初期在贝尔实验室开发的&#xff0c;作为C语言的一个扩展。C不仅包含了C语言的所有特性&#xff0c;还引入了面向对象编程&#xff08;OOP&#xff09;的概念&…

Poe是什么?怎样订阅Poe?

Poe&#xff08;全称“开放探索平台”&#xff0c;Platform for Open Exploration&#xff09;是一款由Quora开发的移动应用程序&#xff0c;于2022年12月推出。该应用程序内置建基于AI技术的聊天机器人&#xff0c;可供用户向机器人询问专业知识、食谱、日常生活&#xff0c;甚…

智能AI数字人系统 打造无人直播间 主播形象任意选择!

系统概述 智能AI数字人系统是一种结合人工智能、计算机图形学、语音合成等技术的综合性系统。该系统能够模拟人类的外貌、行为和语言&#xff0c;为用户提供逼真的交互体验。在无人直播间场景下&#xff0c;智能AI数字人系统可以扮演主播角色&#xff0c;与观众进行实时互动&a…

Jenkins构建流程

Jenkins是DevOps【(Development和Operations的混成词&#xff09;是一种重视“软件开发人员&#xff08;Dev&#xff09;”和“IT运维技术人员&#xff08;Ops&#xff09;”之间沟通合作的文化、运动或惯例)】的重要一环&#xff0c;是一款开源的CI&CD软件。也就是持续集成…

MongoDB 推出新项目,助力企业构建生成式 AI 现代应用程序

MongoDB AI Applications Program可为组织提供战略路线图、行业专业知识及所需技术&#xff0c;加速从构思到大规模部署生成式 AI 应用程序 MongoDB (纳斯达克股票代码&#xff1a;MDB) 近日宣布推出 MongoDB AI Applications Program (MongoDB AI应用项目&#xff0c;简称&am…

【PostgreSQL支持中文的全文检索插件(zhparser)】

PostgreSQL本身是支持全文检索的&#xff0c;提供两个数据类型&#xff08;tsvector,tsquery&#xff09;&#xff0c;并且通过动态检索自然语言文档的集合&#xff0c;定位到最匹配的查询结果。其内置的默认的分词解析器采用空格进行分词&#xff0c;但是因为中文的词语之间没…

使用java.io库序列化Java对象

在我们使用诸如Redis这类缓存系统时&#xff0c;我们往往会存在如下需求&#xff1a;将Java对象保存到Redis缓存中&#xff0c;然后在其他机器上还原回来。 Json方案 我们可以引入Json库等方式&#xff0c;将Java对象序列化为Json字符串来实现这个目的&#xff0c;但是这样的…

【JS面试题】this

this取什么值&#xff0c;是在函数执行的时候确定的&#xff0c;不是在函数定义的时候确定的&#xff01; this的6种使用场景&#xff1a; ① 在普通函数中使用&#xff1a;返回window对象 ② 使用call apply bind 调用&#xff1a;绑定的是哪个对象就返回哪个对象 ③ 在对象…

IP应用场景查询API接口

IP应用场景查询API接口指的是输入IP地址&#xff0c;查询IP应用场景信息。那么IP地址应用场景查询接口如何对接呢&#xff1f; 首先我们找到一家有IP地址应用场景查询API的服务商数脉API,然后注册账号&#xff0c;购买免费套餐 接下来就需要技术同学把IP应用场景查询接口对接到…

【线性系统理论】笔记一

一&#xff1a;状态空间表达式 电路系统状态空间描述列写 1&#xff1a;选取状态变量 状态变量定义&#xff1a;线性无关极大组属性。 2&#xff1a;列出电路原始回路方程 ps&#xff1a;状态变量有两个&#xff0c;理论上需要列写2个方程 3&#xff1a;规范形势 4&#xf…

比大小(打擂台)(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明比较大小函数max; int max(int a, int b);int main() {//初始化变量值&#xff1b;int i, n, m, a[10];//填充数组&#xff1b;printf("请输入10个数…

注意力机制篇 | YOLOv8改进之在C2f模块引入反向残差注意力模块iRMB | CVPR 2023

前言:Hello大家好,我是小哥谈。反向残差注意力模块iRMB是一种用于图像分类和目标检测的深度学习模块。它结合了反向残差和注意力机制的优点,能够有效地提高模型的性能。在iRMB中,反向残差指的是将原始的残差块进行反转,即将卷积操作和批量归一化操作放在了后面。这样做的好…

一台linux通过另一台linux访问互联网-TinyProxy

参考&#xff1a; https://blog.csdn.net/weixin_41831919/article/details/113061317https://www.yuncongz.com/archives/1.htmlhttps://blog.csdn.net/aoc68397/article/details/101893369 环境&#xff1a;ubuntu 18.04 机器1: IP 219.216.65.252 (可以访问外网) 机器2: IP…

下单制造fpc的工艺参数

FPC工艺简介 - 百度文库 (baidu.com) FPC工艺参数 - 豆丁网 (docin.com) FPC柔性线路板的主要参数.ppt (book118.com) 捷多邦&#xff1a; 华秋&#xff1a; 背胶&#xff1a; FPC板背胶是可以粘接在光滑表面的一种薄型胶带&#xff0c;可以在狭小以及光滑的表面上用来提供高…

【IDE】com.intellij.debugger.engine.evaluation.EvaluateException

目录标题 报错重现代码分析解决方式 报错重现 Error during generated code invocation com.intellij.debugger.engine.evaluation.EvaluateException: Method threw java.lang.NullPointerException exception.代码分析 //ls来自上下文 ls.stream().map(m->m.getRewardTy…

搞懂Docker(十)- 优化创建镜像

获取示例程序 示例程序 或者 示例程序 获取示例程序程序结构如下├── getting-started-app/ │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock优化创建镜像 使用docker image history命令,可以查看创建镜像里的每一层的信息…

Java面试八股文(SpringCloud篇)

****************************************************

AI大模型日报#0514:OpenAI GPT-4o震撼发布、我是如何赢得GPT-4提示工程大赛冠军的

导读&#xff1a;欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。《AI大模型日报》今日要点&#xff1a;OpenAI在春季新品发布会上推出全能模型GPT-4o及桌面App&#xff0c;颠覆科技界。GPT-4o…