单点登录 - keycloak实现

一、安装keycloak应用

采用docker的方式运行一个keycloak应用,方便进行学习。

在我的ubuntu虚拟机中,写一个docker-compose.yml文件,内容如下,安装一个keycloak、一个postgres数据库。

version: "3"
services:
  auth:
    image: jboss/keycloak
    ports:
    - "8080:8080"
    environment:
    - "KEYCLOAK_USER=admin"
    - "KEYCLOAK_PASSWORD=admin"
    - "DB_VENDOR=postgres"
    - "DB_ADDR=postgres"
    - "DB_DATABASE=postgres"
    - "DB_USER=postgres"
    - "DB_PASSWORD=admin"
    - "PROXY_ADDRESS_FORWARDING=true"
  postgres:
    image: postgres:9.6
    ports:
    - "5432:5432"
    environment:
    - "POSTGRES_PASSWORD=admin"

执行如下命令,启动容器

docker-compose -f docker-compose.yml up -d

启动成功后,我们通过vscode编辑器的docker-compose插件,能看到虚拟机中运行了容器

我们用8080端口访问,http://192.168.71.133:8080/, 并使用账户admin、admin登录即可。

二、简单使用示例

创建Realm

创建一个新的realm: demo,后续所有的客户端、用户、角色等都在此realm中创建。

创建客户端

创建后端应用客户端:golang-demo,  Access Type 选择 bearer-only。 保存之后,会出现 Credentials的 Tab,记录下这里的secret,后面要用到。

关于客户端的访问类型(Access Type)

keycloak的访问类型共有3种:

  • confidential:适用于服务端应用,且需要浏览器登录以及需要通过密钥获取access token的场景。典型的使用场景就是服务端渲染的web系统。
  • public: 适用于客户端应用,且需要浏览器登录的场景。典型的使用场景就是前端web系统,包括采用vue、react实现的前端项目等。
  • bearer-only:适用于服务端应用,不需要浏览器登录,只允许使用bearer token请求的场景。典型的使用场景就是restful api。

创建角色

创建2个角色:ROLE_ADMIN、ROLE_CUSTOMER

创建用户

创建2个用户:admin、customer

绑定用户和角色

给admin用户分配角色 ROLE_ADMIN

给customer用户分配角色ROLE_CUSTOMER

三、配置说明

Consent Required

配置client的时候,有这个选项,可以on、off。

在Keycloak中,“Consent Required”通常与用户授权和同意流程相关,这是一个重要的安全特性,用于确保用户明确知道并同意应用程序或服务将访问其哪些数据或执行哪些操作。这种机制在符合GDPR(通用数据保护条例)等隐私法规的环境中尤为重要。

Keycloak作为一个开源的身份和访问管理(IAM)解决方案,支持多种认证和授权协议,包括OAuth 2.0和OpenID Connect。在这些协议中,“Consent Required”流程通常与OAuth 2.0的授权过程或OpenID Connect的身份验证和授权过程相结合。

“Consent Required”流程概述
  1. 触发流程
    • 当用户尝试通过Keycloak进行身份验证,并授权一个客户端(如应用程序或服务)访问其受保护资源时,流程被触发。
  2. 显示同意屏幕
    • Keycloak会向用户显示一个同意屏幕,列出客户端请求访问的资源、权限和可能的其他信息。
    • 同意屏幕通常会告知用户哪些数据将被访问,以及这些数据将如何被使用。
  3. 用户同意
    • 用户需要阅读同意屏幕上的信息,并明确表示是否同意授权。
    • 如果用户同意,Keycloak将继续执行授权过程;如果用户拒绝,则授权过程将终止。
  4. 记录同意
    • 用户的同意会被Keycloak记录,以便将来进行审计和合规性检查。
  5. 发放令牌
    • 如果用户同意,Keycloak将向客户端发放访问令牌(如OAuth 2.0访问令牌或OpenID Connect ID令牌),允许客户端访问用户的受保护资源。

在Keycloak中配置“Consent Required”

Keycloak提供了灵活的配置选项,允许管理员根据需要启用或禁用“Consent Required”流程。以下是一些基本的配置步骤(请注意,具体步骤可能因Keycloak版本和部署方式而异):

  1. 登录Keycloak管理控制台
    • 使用管理员凭据登录Keycloak管理控制台。
  2. 导航到客户端设置
    • 在管理控制台中,找到并导航到需要配置“Consent Required”流程的客户端。
  3. 修改客户端设置
    • 在客户端设置中,找到与授权相关的配置选项。
    • 启用或禁用“Consent Required”选项(具体选项名称可能因Keycloak版本而异)。
  4. 保存设置
    • 保存对客户端设置的更改,并确保Keycloak已重新加载配置。

注意事项

  • “Consent Required”流程可能会增加用户交互的复杂性,因此在设计应用程序时需要考虑用户体验。
  • 在启用“Consent Required”流程之前,请确保已经充分测试了应用程序的授权和身份验证流程,以确保它们能够正确运行。
  • 遵守相关的隐私法规和法律要求,确保用户的同意是自愿的、明确的,并且符合法规要求。

Keycloak的官方文档和社区论坛是获取有关“Consent Required”流程和其他相关配置的最新和详细信息的最佳来源。如果您在使用Keycloak时遇到任何问题,建议查阅官方文档或寻求社区的帮助。

单点登录协议有哪些?CAS、OAuth、OIDC、SAML有何异同?-腾讯云开发者社区-腾讯云 (tencent.com)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Keycloak单点登录,需要完成以下步骤: 1. 安装Keycloak 2. 创建一个Keycloak Realm 3. 添加一个Client 4. 在Vue应用中安装Keycloak插件 5. 配置Vue应用以使用Keycloak插件 6. 在Vue应用中实现认证和授权 具体的操作步骤如下: 1. 安装Keycloak 可以参考Keycloak官方文档来安装Keycloak,官方文档地址为:https://www.keycloak.org/documentation.html 2. 创建一个Keycloak Realm 可以创建一个Realm,用于存储应用程序的用户,角色和客户端信息。可以参考Keycloak官方文档来创建Realm,官方文档地址为:https://www.keycloak.org/documentation.html 3. 添加一个Client 在Keycloak中添加一个Client,该Client将用于Vue应用的单点登录。可以参考Keycloak官方文档来添加Client,官方文档地址为:https://www.keycloak.org/documentation.html 4. 在Vue应用中安装Keycloak插件 运行以下命令来安装Vue Keycloak插件: ``` npm install vue-keycloak-js --save ``` 5. 配置Vue应用以使用Keycloak插件 在Vue应用中配置Keycloak插件,包括realm,client ID和Keycloak URL等信息。可以参考Vue Keycloak插件的官方文档来配置,官方文档地址为:https://www.npmjs.com/package/vue-keycloak-js 6. 在Vue应用中实现认证和授权 在Vue应用中使用Keycloak插件来实现认证和授权。可以使用Keycloak提供的API来调用认证和授权相关的功能。可以参考Vue Keycloak插件的官方文档来实现认证和授权,官方文档地址为:https://www.npmjs.com/package/vue-keycloak-js 以上就是使用Keycloak单点登录的基本步骤,如果需要更详细的操作步骤,可以参考Keycloak和Vue Keycloak插件的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值