主要内容

  • 密码认证
  • 授权码认证 哪个client申请的code,使用哪个client获取token
  • 客户端认证 在kc开通了服务端帐号之后,可通过client_id和client_secret来获取token,与用户无关,无刷新token机制
  • 自动触发社区认证 当用户在社区网站上登录后,访问这个地址可自动登录法宝
  • 验证token是否在线 可使用任意client来验证所有token的在线性
  • refresh_token刷新token 哪个client生成的token,就用哪个client去刷新
  • 登出/注销 官方post方式和浏览器302方式

密码认证

  • POST /auth/realms/your-realm/protocol/openid-connect/token
  • 请求体 x-www-form-urlencoded
grant_type:password
username:test
password:123456
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
client_id:democlient
  • 响应
{
"access_token": "*.*.*",
"expires_in": 3000,
"refresh_expires_in": 1800,
"refresh_token": "*.*.*",
"token_type": "bearer",
"not-before-policy": 1619512543,
"session_state": "765969ec-94da-4edb-9dcb-e15ea3e0ad3b",
"scope": "roles email profile"
}

授权码认证

注意的几点

  • code时的redirect_uri和authorization_code的需要是一致的,不一致的错误
{
"error": "invalid_grant",
"error_description": "redirect_uri error"
}
  • code时的client_id和client_secret和authorization_code的需要是一致的,不一致的错误,这块我已经修改了源码,去掉了这个限制

    {

    "error": "invalid_grant",

    "error_description": "Auth error"

    }
  • code的组成

    它由3部分组成,中间使用.分割,第一部分是UUID,第二部分是用户会话ID【session_state】,第三部分是客户端ID,例如:
5c33f9a2-cbf4-4804-a8ee-e2d076eda2d6.40be5301-f41b-4f0d-97e7-d2074db2801c.ff591897-7654-460e-9c19-8e8f92117768

请求code

  • GET /auth/realms/your-realm/protocol/openid-connect/auth
  • QUERY
client_id:democlient
scope:openid
response_type:code
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
redirect_uri:http://localhost:9090/callback
  • 跳转到kc的登录页,完成用户名和密码的登录

  • 登录成功之后,跳回callback删除,在url参数上带上了code

请求token

  • POST /auth/realms/your-realm/protocol/openid-connect/token
  • 请求体 x-www-form-urlencoded
grant_type:authorization_code
code:68058719-add6-4b40-ab96-8e71af03827a.7a31b1a9-c3e8-46d4-b8cc-345012fcf4a2.25e52f60-5991-43dd-9108-873f60af385d
client_id:democlient
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
scope:openid
redirect_uri:http://localhost:9090/callback
  • 响应
{
"access_token": "*.*.*",
"expires_in": 3000,
"refresh_expires_in": 1800,
"refresh_token": "*.*.*",
"token_type": "bearer",
"id_token": "*.*.*",
"not-before-policy": 1619660302,
"session_state": "14812f50-b9f7-4cee-be56-bf9bef5c961a",
"scope": "openid roles email profile"
}

客户端认证

客户端认证,与用户无关,主要保证向keycloak发起的请求,来自合法的client即可(由keycloak颁发的client)

  • POST /auth/realms/your-realm/protocol/openid-connect/token
  • 请求 x-www-form-urlencoded
  • 参数
grant_type:client_credentials
client_secret:912ecc47-60b1-4dd4-8f62-c7745c293cab
client_id:kce
  • 注意,需要在keycloak客户端配置开启服务账号

  • 如果没有开启服务账号,将出现下面异常
{
"error": "unauthorized_client",
"error_description": "Client not enabled to retrieve service account"
}

自动触发社区认证

carsi中出现的东西,院校希望直接通过固定的uri实现社区登录,故开发这个功能

  • 这个里的重定向认证使用的认证流是carsi

  • 其次,需要新添加客户端,专门用来发送社区自动认证请求的,如carsi-auto,或者配置客户端的自定义认证方式

  • 最后,测试一下,你可以看到,通过这个地址,可以唤起社区登录,最后回调到我们OIDC认证上来

验证token是否在线

是否触发了keycloak的logout接口,如果触发了,那token将被删除,在线状态active为false,如果不希望提供client_secret参数,也可以通过/auth/realms/your-realm/protocol/openid-connect/userinfo接口来判断token是否有效,httpcode为401表示token失效.

  • 使用场景:a客户端在kc申请的token,可以在b客户端调用kc的接口去校验它的合法性
  • POST /auth/realms/your-realm/protocol/openid-connect/token/introspect
  • 请求体 x-www-form-urlencoded
token:*.*.*
client_id:democlient
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
  • 响应,状态码都是200,如果json体中active为false,表示已经离线
{
"active": false
}

refresh_token刷新token

注意,刷新token与客户端有关,自己客户端生产的access_token,只能由自己客户端去refresh_token刷新

  • POST /auth/realms/your-realm/protocol/openid-connect/token
grant_type:refresh_token
refresh_token:*.*.*
client_id:democlient
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
  • 响应

    新的token对象
{
"access_token": "*.*.*",
"expires_in": 3000,
"refresh_expires_in": 1800,
"refresh_token": "*.*.*",
"token_type": "bearer",
"not-before-policy": 1621497420,
"session_state": "405d25b0-5128-45ae-9934-953eecb79894",
"scope": "roles profile"
}

登出/注销

KC的登出是属于会话的登出,通过这个会话产生的所有token(一个会话可能对应多个不同client的token)都将会退出

一般地,如果是前后不分享项目,应该还会清除自己网站的session会话,然后再去调用KC的接口

  • POST /auth/realms/your-realm/protocol/openid-connect/logout
  • 请求体 x-www-form-urlencoded
refresh_token:*.*.*
client_id:democlient
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
  • 响应
HttpCode为200或者204表示操作成功
  • 浏览器端可通过这个接口来实现302浏览器跳转方式的登出
GET /auth/realms/your-realm/sms/remove-sessions?redirect_uri={redirect_uri}
登出后,KC会跳转到redirectUri的页面

keycloak~认证与校验使用说明的更多相关文章

  1. jenkins 集成 keycloak 认证

    keycloak 是很不错的sso 工具,当然也有Jenkins 的插件,我们可以使用jenkins 插件,方便用户账户的管理 环境准别 docker-compose version: "3 ...

  2. 【JEECG技术文档】Online唯一校验使用说明

    1.功能介绍 配置了唯一校验的字段,在录入和编辑页面中,动态查询用户输入值是否存在校验. 要使用online唯一校验功能必须先在online表单开发中配置唯一字段的校验方式为唯一校验. 2.配置唯一校 ...

  3. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  4. 双向认证 HTTPS双向认证

    [微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3 HTTPS双向认证使用说明 ...

  5. java jvm学习笔记七(jar包的代码认证和签名)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前言: 如果你循序渐进的看到这里,那么说明你的毅力提高了,jvm的很多东西都是比较抽像的,如果不找相对应的代码来辅助理解 ...

  6. shiro基础学习(二)—shiro认证

    一.shiro简介      shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证.权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架. 以下 ...

  7. 使用微服务架构思想,设计部署OAuth2.0授权认证框架

    1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是 ...

  8. Django学习之九: auth 认证组件

    目录 Django auth 认证组件 配置使用auth组件及其中间件 request.user 可以直接在template模版中使用 auth组件常用api 获取认证model类 认证检测装饰器@l ...

  9. drf视图组件、认证组件

    视图组件 1.基本视图 url(r'^publish/$', views.PublishView.as_view()), url(r'^publish/(?P<pk>\d+)/$', vi ...

  10. 【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我们介绍了网关使用Redis进行缓存,并介绍了如何进行缓存实现,缓存信息清理接口的使用.本篇我们将介绍如何实现网关自定义客户端授权, ...

随机推荐

  1. 2-SQL注入渗透与攻防

    1.SQL注入基础 1.1 什么是sql注入 一.SQL注入概述 二.数据库概述 1.关系型数据库 关系型数据库,存储格式可以直观的反映实体间的关系,和常见的表格比较相似 关系型数据库中表与表之间有很 ...

  2. 开源的 Linux 游戏平台「GitHub 热点速览」

    <越狱>.<迷失>.<西部风云>等经典美剧背后的民间字幕翻译团队--人人影视,由于 AI 翻译的崛起.官方中文字幕的普及和版权问题,最终决定以开源的方式,为这段旅程 ...

  3. 微信开发者工具请求接口 Provisional headers are shown

    前情 最近全权负责公司小程序项目的开发,使用的uniapp技术栈. 坑 在和服务端联调的时候发现,接口pending很久,而且时不时的报Provisional headers are shown,而且 ...

  4. Centos更改SSH端口的方法

    1,vi sshd vi /etc/ssh/sshd_config 2,添加PORT #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ...

  5. Qt编写物联网管理平台38-多种数据库支持

    一.前言 本系统设计之初就要求支持多种不同的数据库,比如sqlite.mysql.postgres.sqlserver等,甚至包括国产数据库比如人大金仓kingbase等,(由于现在国产化的大力推进, ...

  6. Matlab R2009b 版 license 到期问题

    打开2009b Matlab,反复提示需要激活,是lisense到期了,到期时间2017年11月11日.解决方法: 将以下内容替换 Matlab 安装路径下 license/*.lic 文件中的所有内 ...

  7. [转]java中带图片按钮的大小设置

    在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题,那就是按钮的大小默认按照图片的大小来显示,这大大降低了界面的美观程度: 按照方法: JB ...

  8. 移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)

    本文由携程技术团队Aaron分享,原题"干货 | 携程弱网识别技术探索",下文进行了排版和内容优化. 1.引言 网络优化一直是移动互联网时代的热议话题,弱网识别作为移动端弱网优化的 ...

  9. react学习之antd

    antd 为 Web 应用提供了丰富的基础 UI 组件,我们还将持续探索企业级应用的最佳 UI 实践.它最初是基于 React 的组件库,但随着技术的发展,现在也提供了基于 Vue.js 的版本--A ...

  10. Windows环境配置Nginx服务实现负载均衡

    系统环境:win10 测试服务:.net6.0+webapi 一.本地创建一个webapi项目 二.新建一个api控制器,里面编写一个测试方法 三.我直接把这一个项目复制了3份,然后修改控制器方法中的 ...