×

零信任oauth2认证实验环境搭建指引/搭建oauth2认证服务器
  

杨童 11

{{ttag.title}}
本帖最后由 杨童 于 2024-11-26 22:13 编辑

核心思想:为解决零信任oauth2认证学习实验的环境搭建问题,编写此文档作为学习指引,可模拟实际业务环境与零信任对接oauth2认证

本文基于keycloak实现,Keycloak 是一个开源的身份和访问管理解决方案,主要用于为应用程序和服务提供单点登录(SSO)、身份验证和授权功能。它支持多种身份验证协议,如 OAuth 2.0、OpenID Connect 和 SAML 2.0。

本文分为几个部分
1、keycloak服务器环境部署介绍
2、keycloak使用指引和oauth2相关配置介绍
3、keycloak的oauth2部分认证接口介绍

1、keycloak搭建指引---分为windows和linux两种部署方式:
    1.1、基础环境:windows或linux;java17以上
    1.2、安装包:https://www.keycloak.org/downloads建议迅雷下载,ZIP是windows,TAR.GZ是linux


    1.3、windows部署:
a)将下载好的压缩包解压到任意位置


        1.3.1、java环境部署,windows从官网下载java安装包Java Downloads | Oracle 中国


        1.3.2、双击下载后的安装包按照指示下载即可


        1.3.3、配置环境变量


        1.3.4、新建一个系统变量:变量名为JAVA_HOME  变量值为java安装路径

        1.3.5、在Path变量中新建一个变量,名为%JAVA_HOME%\bin,然后确定保存退出即可

        1.3.6、检查java设置是否正常,打开cmd输入java -version查看当前java版本

        1.3.7、进入keycloak目录下的bin文件夹,然后创建管理员账户(web控制台登录使用)执行:kc.bat bootstrap-admin user      然后根据提示设置账号密码

        1.3.8、windows:bin目录下执行kc.bat start-dev

        1.3.9、浏览器输入http://server-IP:8080即可访问到平台登录页面,输入前期配置的账号密码登录即可访问,平台搭建完毕


    1.4、linux部署:以centos8举例
a)安装java环境,使用yum安装java17以上版本
使用yum安装
yum install java-17-openjdk-devel
配置环境变量
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/binPATH
使用java -version确认版本

        1.4.1、将linux的以tar结尾的压缩包上传到linux后台,然后使用tar -zxvf 压缩包名,将文件解压

        1.4.2、使用cd进入解压的目录下的bin目录,执行./kc.sh bootstrap-admin user 创建管理员账号

       1.4.3、在bin目录下执行 ./kc.sh start-dev   启动服务

      1.4.4、浏览器输入http://server-IP:8080即可访问到平台登录页面,输入前期配置的账号密码登录即可访问,平台搭建完毕





2、keycloak使用指引和oauth2认证配置指引
    2.1、浏览器输入http://server-IP:8080即可访问到平台登录页面,输入前期配置的账号密码登录即可访问

    2.2、设置中文,根据下图设置后退出就变成中文页面了


    2.3、领域(realm):领域的概念类似于vpc,领域之间的应用和用户相互隔离,涉及的API接口、认证方式也都是独立的,实验中可以新建也可以使用默认的master,领域名字要记住,后续调用api时会用到(不是所有4A平台都有领域的概念)



    2.4、创建客户端:应用(OA、零信任)和4A平台(keycloak、oauth2平台)对接时,应用在4A平台中就叫做客户端,一个客户端对应一个业务系统
选择对应的领域-客户端-创建客户端即可开始创建过程

第一步输入客户端ID和名称,客户端ID就是client_id,这个要记住后续会用到(所有4A平台都有),是4A要提供给零信任的信息之一


    2.5、开启客户端认证、授权、勾选oauth2

    2.6、配置应用回调地址,此地址由零信任提供给4A平台,由4A平台管理员填写到此处。配置后保存即可

    2.7、配置后即可看到对应的应用在列表中

    2.8、配置应用角色:和零信任、sslvpn一样,keycloak也有角色的定义,也是用于授权的,需要先创建角色,然后给用户分配角色,用户就可以拥有对应应用的权限
每个客户端创建好之后,都会默认带一个名为uma_protection的角色,不同客户端中虽然都会存在同名角色,但是实际不同,这里也可以不单独创建角色,复用默认的就行


    2.9、获取客户端秘钥:点击客户端的凭证页面,将客户端密码记录下来,这个就是client_secret,后续会用到这个参数(所有4A平台都有)


    2.10、配置用户账户

    2.11、配置用户名,创建后会直接到用户详情页面

    2.12、设置密码,选择凭证-设置密码


    2.13、配置角色:点击用户编辑页面的角色映射,点击分配角色

可以看到存在同名的角色,但是实际前缀会根据客户端进行标注,注意别选错,勾选后点击赋予即可,这样

    2.14、以上配置后,4A平台的配置工作就完成了,客户端、用户、角色权限分配这些动作,都是通用的,不同厂商的oauth2平台虽然页面有区别,但是核心的操作步骤是一致的。接下来就可以在零信任侧进行对接配置了




3、keycloak-oauth2认证接口文档
正常项目中,需要客户/4A平台提供认证接口文档,零信任需要根据接口文档要求的参数配置对接

部分参数说明:
{realm-name}=领域名,注意替换
client_id=4A平台中客户端配置中获取
client_secret=4A平台中客户端配置中获取

API接口说明:

获取code接口:/realms/{realm-name}/protocol/openid-connect/auth
请求示例:
GET /authorize?
    response_type=code
&scope=openid%20profile%20email
    &client_id=s6BhdRkqt3
    &state=af0ifjsldkj
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb HTTP/1.1
  Host: server.example.com

响应示例:
  HTTP/1.1 302 Found
code=SplxlOBeZQQYbYS6WxSbIA
    &state=af0ifjsldkj


获取token接口:/realms/{realm-name}/protocol/openid-connect/token
请求示例:
  POST /token HTTP/1.1
  Host: server.example.com
  Content-Type: application/x-www-form-urlencoded
  Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
响应示例:
HTTP/1.1 200 OK
  Content-Type: application/json
  Cache-Control: no-store
{
   "access_token": "SlAV32hkKG",
   "token_type": "Bearer",
   "refresh_token": "8xLOxBtZp8",
   "expires_in": 3600,
   "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzc
yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5
NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZ
fV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5Nz
AKfQ.ggW8hZ1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6q
Jp6IcmD3HP99Obi1PRs-cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJ
NqeGpe-gccMg4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7Tpd
QyHE5lcMiKPXfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoS
K5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4
XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg"
  }


获取用户信息接口:/realms/{realm-name}/protocol/openid-connect/userinfo
请求示例:
  GET /userinfo HTTP/1.1
  Host: server.example.com
  Authorization: Bearer SlAV32hkKG

响应示例:
HTTP/1.1 200 OK
  Content-Type: application/json
{
   "sub": "248289761001",
   "name": "Jane Doe",
   "given_name": "Jane",
   "family_name": "Doe",
   "preferred_username": "j.doe",
   "email": "janedoe@example.com",
   "picture": "http://example.com/janedoe/me.jpg"
  }


打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
安全效果
每日一问
【 社区to talk】
干货满满
技术笔记
GIF动图学习
产品连连看
新版本体验
技术咨询
2023技术争霸赛专题
功能体验
自助服务平台操作指引
每周精选
通用技术
安装部署配置
秒懂零信任
信服课堂视频
标准化排查
排障笔记本
玩转零信任
答题自测
原创分享
技术晨报
社区新周刊
POC测试案例
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高手请过招
升级&主动服务
高频问题集锦
全能先锋系列
云化安全能力

本版版主

0
2
1

发帖

粉丝

关注

38
8
5

发帖

粉丝

关注

5
3
4

发帖

粉丝

关注

47
4
1

发帖

粉丝

关注

1
4
0

发帖

粉丝

关注

0
0
0

发帖

粉丝

关注

本版达人