当某些合作商希望把你的keycloak作为他们的一种第三方登录方式时,就像微信,google,github,使用你的keycloak上的账户资源时,你就需要考虑如何做一个开放的,标准的文档了。 一基本角色 认证提供者:keycloak服务,https://kc.xxx.com 第三方应用:先到keycloak上注册,由keycloak颁发client_id和client_secret,并与第三方应用确定好callback回调地址。 用户:使用keycloak服务完成登录,然后去访问第三方应用,当然也可以访问对接到keycloak上的所有服务资源。 二接入流程 1向keycloak管理员提供...

  2xk0JyO908yA   9天前   49   0   0 Java

摘要 当业务量发生变化时,需要对上游服务进行扩缩容,或者因服务器硬件故障需要更换服务器。如果网关是通过配置来维护上游服务信息,在微服务架构模式下,其带来的维护成本可想而知。再者因不能及时更新这些信息,也会对业务带来一定的影响,还有人为误操作带来的影响也不可忽视,所以网关非常必要通过服务注册中心动态获取最新的服务实例信息。架构图如下所示: 服务启动时将自身的一些信息,比如服务名、IP、端口等信息上报到注册中心;各个服务与注册中心使用一定机制(例如心跳)通信,如果注册中心与服务长时间无法通信,就会注销该实例;当服务下线时,会删除注册中心的实例信息; 网关会准实时地从注册中心获取服务实例信息; ...

  2xk0JyO908yA   9天前   21   0   0 Kubernetes

参考 https://docs.api7.ai/apisix/how-to-guide/custom-plugins/create-plugin-in-lua https://apisix.apache.org/docs/apisix/next/plugin-develop/ https://apisix.apache.org/docs/apisix/next/plugins/prometheus/ https://apisix.apache.org/blog/2022/02/16/file-logger-api-gateway/此文档是关于lua语言的插件开发,其他语言请看:externa...

  2xk0JyO908yA   12天前   24   0   0 云计算

开发插件的步骤 在APISIX中,要自定义插件,一般需要按照以下步骤进行操作: 编写Lua脚本:首先,你需要编写Lua脚本来实现你想要的功能。可以根据APISIX提供的插件开发文档和示例进行编写。 将Lua脚本放置到APISIX插件目录:将编写好的Lua脚本文件放置到APISIX的插件目录下,一般是/usr/local/apisix/lua-plugins/目录。 编辑配置文件:修改APISIX的配置文件,启用自定义插件。在conf/config.yaml文件中添加对应的插件配置,指定使用你编写的Lua脚本。 重启APISIX服务:完成以上步骤后,记得重启APISIX服务使配置生效,可以使用...

  2xk0JyO908yA   12天前   29   0   0 云计算

扩展apisix原始插件 当apisix提供的插件不能满足我们要求时,我们可能需要将它的plugin进行个性化扩展,例如一个jwt认证插件jwt-auth,它本身具有验证jwt有效性功能,支持rs256,hs256等常用签名算法,但在验证之后,如果希望将jwt中的用户信息取出来,并放请求头向上游传递,目前这个插件是不支持的,我们需要扩展一下它,下面看具体的步骤。 下载apisix源代码,找个原来的插件,在上面直接开发 找到_M.rewirte方法,在解析jwt之后,添加向下一请求头写入的代码 core.request.add_header(ctx,"sub",jwt_obj.payload...

  2xk0JyO908yA   12天前   29   0   0 云计算

参考:https://apisix.apache.org/docs/apisix/plugins/authz-keycloak/ kc插件源码梳理及原理说明 如果只是进行keycloak颁发的token进行校验(签名校验和有效期校验),那么我们可以使用jwt-auth这个插件实现,并且已经对这个插件进行二次开发,支持jwt内容解析与向下请求头的传递。 作用 主要用到keycloak提供的uma远程资源授权上面,它对于直接在keycloak后台配置上游服务的资源权限,进行代理,不需要上游服务再去直接对接keycloak。 原理 在lua插件中,实现了与keycloak服务端的通讯,你可以把这...

  2xk0JyO908yA   12天前   29   0   0 云计算

学习Lua的必要性 nginx开发 apisix,kong插件开发 语言特点 语句结束没有分号 跟JavaScript很像 默认定义的是全局变量,定义局部变量需要加local关键字 数组索引从1开始 没有i操作符号,只能i=i+1 注释 单行注释 -注释内容 多行注释 --[[ 注释内容 ]]-- 内置数据类型 总共有6种内置数据类型,其中包括nil,boolean,number,string,table,function nil 通常是没有赋值,直接使用才会是这个值,比如说下面的代码直接打印变量nameluaprint(name),在ifelse判断语句中,nil被当成f...

  2xk0JyO908yA   12天前   17   0   0 其他语言

keycloak的登录皮肤theme,可以设置领域全局的,或者每个客户端进行单独设置,这种设计是没有问题的,但有时,一个客户端可能有多种主题,这时,你只能再加个客户端,对应新的主题,但这样不方便日后的统计,因为很多统计维度都是以client为基础的,所以,我们需要在进入登录页时,让开发人员转具体的皮肤参数,然后动态切换皮肤,这个idea不错。 域全局皮肤 客户端个性皮肤 尝试自定义ThemeSelectorProvider失败 这个应该是keycloak不支持多种皮肤,因为它默认通过default皮肤渲染的,咱们添加的,虽然在spi中注册成功了,但在实现中,并未应用。 https://s...

  2xk0JyO908yA   12天前   21   0   0 Java

开发工具 IDE工具:jetbrainIDEA 工具插件:EmmyLua 本机lua项目和调试lua文件 添加lua项目模板,安装完EmmyLua插件就有了 添加模板项目后,在项目中添加lua类型的文件 为lua项目添加一个编译调试器 在调试器中,配置lua和lua项目的信息 现在就可以输出hellworld了 MobDebug pkulchenkoMobDebug是一个Lua语言的远程调试器,通常用于在Lua环境中进行远程调试。这个调试器主要由PaulKulchenko开发,因此被称为pkulchenkoMobDebug。 MobDebug允许您通过网络连接在运行中的Lua程序中设...

  2xk0JyO908yA   12天前   28   0   0 Linux

什么是apisix ApacheAPISIX是一个高性能、轻量级的开源API网关,基于Nginx和OpenResty构建。APISIX提供了丰富的功能和灵活的配置,适用于构建现代的微服务架构和云原生应用。 以下是ApacheAPISIX的一些主要特点和功能: 动态路由:APISIX支持基于请求路径、方法、头部等条件进行动态路由,可以根据需求灵活配置路由规则。 负载均衡:内置多种负载均衡算法,支持权重、IP黑白名单等策略,实现流量分发和控制。 熔断与限流:提供熔断器和限流功能,保护后端服务免受突发流量冲击,确保系统稳定性。 插件系统:APISIX提供丰富的插件系统,包括认证、日志、监控、缓存、...

  2xk0JyO908yA   12天前   21   0   0 Kubernetes

在网关开启jwt-auth插件之后,你的网关就具有了jwt解析和校验的功能,主要是校验jwttoken的有效性,包含过期时间和签名等。 https://apisix.apache.org/docs/apisix/plugins/jwt-auth/ 支持的签名算法 "HS256" "HS512" "RS256" "ES256"如果使用非对称算法rs256和es256时,需要配置公钥信息。 相关配置 { "algorithm":"RS256", "exp":86400, "key":"配置对应的jwt中key对应的值", "private_key":"私钥事实上可以不设置,但本插件设置为必...

  2xk0JyO908yA   12天前   24   0   0 Kubernetes

在MySQL中,当为表添加外键约束时,可以指定在删除或更新父表记录时的行为。下面进行总结: CASCADE:当父表中的记录被删除或更新时,自动删除或更新子表中相关联的记录。这意味着如果父表中的记录被删除,那么相应的子表中与之关联的记录也会被删除。 SETNULL:当父表中的记录被删除或更新时,子表中的外键列会被设置为NULL。这意味着如果父表中的记录被删除,子表中的外键列将会被置空。 SETDEFAULT:当父表中的记录被删除或更新时,子表中的外键列会被设置为默认值。这意味着如果父表中的记录被删除,子表中的外键列将会被设置为预先定义的默认值。 NOACTION:当父表中的记录被删除或更新时,...

  2xk0JyO908yA   12天前   19   0   0 MySQL

在Spring中,CompletableFuture通常用于异步编程,可以方便地处理异步任务的执行和结果处理,CompletableFuture是Java8引入的一个类,用于支持异步编程和并发操作。它基于Future和CompletionStage接口,提供了丰富的方法来处理异步任务的执行和结果处理。 下面是CompletableFuture实现的一些关键原理: 线程池支持:CompletableFuture内部使用线程池来执行异步任务,可以通过指定不同的线程池来控制任务的执行方式。默认情况下,CompletableFuture使用ForkJoinPool.commonPool()作为默认的...

  2xk0JyO908yA   21天前   48   0   0 Java

X-Frame-Options是一个HTTP响应头,用于控制网页是否可以嵌套在<frame>,<iframe>,<embed>或者<applet>中。通过设置X-Frame-Options头部,网站管理员可以防止网页被嵌套到其他网站的框架中,从而有效防范点击劫持等安全风险。下面是关于X-Frame-Options的介绍: 1.作用: X-Frame-Options头部用于指示浏览器是否允许当前页面在<frame>,<iframe>,<embed>或者<applet>中显示。 可以防止点击劫持攻击,...

  2xk0JyO908yA   21天前   38   0   0 架构设计

摘要:在当今的数字世界中,密码安全是至关重要的。为了保护用户密码免受未经授权的访问和破解,Password-BasedKeyDerivationFunction2(PBKDF2)算法成为了一种重要的工具。 在PBKDF2算法中,SHA表示SecureHashAlgorithm,它是一系列密码哈希函数的标准,其中SHA-1、SHA-256、SHA-384和SHA-512等是常见的版本。因此,PBKDF2-SHA就是使用SHA系列算法作为其内部哈希函数的密码派生函数。 PBKDF2-SHA算法的工作原理是通过多次迭代将输入的密码和盐值进行混合和计算,以生成一个安全的密钥。这样设计可以增加攻击者破解...

  2xk0JyO908yA   21天前   30   0   0 算法与数据结构

GraalVM GraalVM是一种高性能、通用的虚拟机,由Oracle公司开发。它支持多种编程语言(如Java、JavaScript、Python等),并提供了即时编译器、AOT编译器等功能。GraalVM的主要特点包括: 高性能:GraalVM提供了优秀的即时编译器,能够将程序在运行时快速编译成本地代码,从而提高执行效率。 多语言支持:除了支持Java之外,GraalVM还支持其他多种编程语言,可以在同一个虚拟机中运行不同语言的程序。 AOT编译:GraalVM支持提前(AheadofTime)编译,能够将程序编译成本地可执行文件,减少启动时间和内存占用。 嵌入式引擎:GraalVM提供...

  2xk0JyO908yA   29天前   41   0   0 Java

这个文章主要介绍一下@AutoConfigureAfter在spring框架中的作用,在使用过程中,很多开发人员在使用它的时候都出现了问题,问题比较多的就是它们的注册顺序总不是我们预期的,下面介绍一下正常的使用方法。 @AutoConfigureAfter用在配置类上面,即需要在@Configuration修饰的类上,而不是@Component上面。 这些配置类,需要在spring.factories上面进行注册 @AutoConfigureAfter影响的是配置类中@Bean声明的方法,而不是配置类本身 代码测试 祖父配置 @Configuration @AutoConfigureBef...

  2xk0JyO908yA   29天前   31   0   0 Java

滑动窗口限流 滑动窗口限流是一种常用的限流算法,通过维护一个固定大小的窗口,在单位时间内允许通过的请求次数不超过设定的阈值。具体来说,滑动窗口限流算法通常包括以下几个步骤: 初始化:设置窗口大小、请求次数阈值和时间间隔。 维护窗口:将请求按照时间顺序放入窗口中,并保持窗口内请求数量不超过阈值。 检查通过:每当有新的请求到达时,检查窗口内请求的总数是否超过阈值,如果未超过则允许通过,同时移除窗口最老的请求。 更新窗口:随着时间的推移,更新窗口内的请求情况,确保窗口内的请求符合限流条件。 滑动窗口限流算法可以有效控制系统的请求流量,避免系统被大量请求压垮。同时,由于其简单高效的特点,被广泛应用...

  2xk0JyO908yA   30天前   22   0   0 算法与数据结构

项目结构 在开发Chrome插件时,以下几个文件的作用如下: manifest.json:这是Chrome插件的清单文件,用于配置插件的基本信息、权限、页面跳转等。其中包括插件的名称、版本号、图标、后台脚本、浏览器动作等信息。 background.js:这是Chrome插件的后台脚本文件,用于处理插件的后台逻辑。可以监听事件、与浏览器进行交互、执行一些后台任务等。在manifest.json中指定了background脚本后,它会在插件加载时自动运行。 popup.html:这是Chrome插件点击后弹出的界面的HTML文件。可以定义插件弹出页面的结构、样式和交互逻辑。 popup.js:...

  2xk0JyO908yA   2024年04月28日   25   0   0 JavaScript

在keycloak中,我们在进行brower浏览器的表单认证时,一般在跳到本页面时,URL上会有redirect_uri这种参数,用来告诉keycloak,在认证成功后的跳转地址,你在表单认证控制器中,可以通过context.getHttpRequest().getUri().getQueryParameters().getFirst("redirect_uri")进行获取,而当你为brower认证流程添加RequiredAction行为之后,你需要在进入RequiredAction时带上这些参数,你是不能直接通过getQueryParameters()方法获取的,因为它之前的页面不是来源页,...

  2xk0JyO908yA   2024年04月26日   26   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~