首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

keycloak~关于授权码认证中的scope的实践

编程知识
2024年09月25日 10:08

前言

1. scope 参数的作用

  • 定义权限scope 用于声明请求访问的资源和权限。常见的值包括 openidprofileemail 等。
  • 影响返回的数据:如果你在授权请求中指定了某些 scope,在后续的 token 请求中,Keycloak 会根据这些 scope 返回相应的信息。
  • openid用于指示请求者希望使用 OpenID Connect 进行身份验证
  • 获取 ID Token:当你在授权请求中包含 openid 时,Keycloak 会返回一个 ID Token,包含用户的身份信息,反之,scope里不加openid,则不会生成ID Token这个字段。

2. 在不同阶段使用 scope

  • 授权请求阶段 (/protocol/openid-connect/auth):

    • 可以传递 scope 参数,以便在用户同意授权时,明确所请求的权限。
  • 令牌请求阶段 (/protocol/openid-connect/token):

    • 也可以在此阶段传递 scope,但通常情况下,如果在授权请求中已指定 scope,则不需要在此再次指定;
    • 在授权中指定了scope,这里再指定是无效的,以授权中指定的值为准

3. 示例

以下是一个获取授权码的请求示例:

GET /auth/realms/{realm}/protocol/openid-connect/auth?
response_type=code&
client_id={client_id}&
redirect_uri={redirect_uri}&
scope=openid profile

4. 总结

  • 建议:虽然 scope 在授权请求中是可选的,但为了确保获得正确的权限和数据,建议在请求中包含 scope 参数。
  • 注意:在实际开发中,根据你的应用需求合理配置 scope 是非常重要的。

实践

oauth2授权码认证的过程

1. 配置客户端及scope模板

  • 默认模板,无论应用是否传scope,默认模板里的权限都会被启用
  • 可选模板,由用户自己选择,通过scope来体现,它会追加到默认模板后面

2. 获取授权码

  • scope中体现了获取用户的email,这一步是由用户自己选择的公开的信息
  • 地址:/auth/realms/{realm}/protocol/openid-connect/auth?client_id=dahengshuju&scope=profile email&redirect_uri=http://www.baidu.com&response_type=code

3. 表单认证

  • 提示用户输入账号密码进行登录
  • 登录成功后,重定向到来源页,带上code码
  • code授权码使用一次后,立即过期

4. 获取token

  • 通过步骤3,获取到的code,它通过scope来限制授权的范围【即token和获取用户信息中包含的字段集合】
  • 步骤2指定了scope,这一步再指定scope是无效的,二选一即可
  • 地址:/auth/realms/{realm}/protocol/openid-connect/token
  • 请求表类型:x-www-form-urlencoded
  • 请求参数
grant_type:authorization_code
code:3be438fe-8651-4a84-8141-976b76e671e1.75cab95f-a1ec-4b9b-9a6e-8f1ecb651cd6.61d819de-33e4-4006-ae66-dd7609ea2d3e
client_id:dahengshuju
client_secret:9e3de70f-d5cd-4d11-a8aa-85fd3af13265
scope:profile
  • 这是scope为profile email的token
{
    "exp": 1727233162,
    "iat": 1727231362,
    "auth_time": 1727229121,
    "jti": "bb296d9d-d521-45b1-aab9-8cb6bea0ddc3",
    "iss": "https://xx.xx.com/auth/realms/xx",
    "sub": "347c9e9e-076c-45e3-be74-c482fffcc6e5",
    "typ": "Bearer",
    "azp": "dahengshuju",
    "session_state": "75cab95f-a1ec-4b9b-9a6e-8f1ecb651cd6",
    "acr": "0",
    "scope": "email profile",
    "email_verified": false,
    "preferred_username": "test",
    "locale": "zh-CN",
    "email": "bfyxzls@gmail.com"
}
  • 这是scope为profile的token,里面是没有email信息的
{
    "exp": 1727233521,
    "iat": 1727231721,
    "auth_time": 1727229121,
    "jti": "f7de8ad9-7558-4f4a-8761-8724f685febb",
    "iss": "https://xx.xx.com/auth/realms/xx",
    "sub": "347c9e9e-076c-45e3-be74-c482fffcc6e5",
    "typ": "Bearer",
    "azp": "dahengshuju",
    "session_state": "75cab95f-a1ec-4b9b-9a6e-8f1ecb651cd6",
    "acr": "0",
    "scope": "profile",
    "preferred_username": "test",
    "locale": "zh-CN"
}

5. 通过access_token获取用户信息

  • 用户信息主要是对token中的内容进行解析
  • 地址:/auth/realms/{realm}/protocol/openid-connect/userinfo
  • 请求头:Authorization: Bearer
{
    "sub": "347c9e9e-076c-45e3-be74-c482fffcc6e5",
    "email_verified": false,
    "preferred_username": "test",
    "locale": "zh-CN",
    "email": "xxx@gmail.com"
}
From:https://www.cnblogs.com/lori/p/18430912
本文地址: http://www.shuzixingkong.net/article/2291
0评论
提交 加载更多评论
其他文章 使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能
前言 最近比较闲,(项目要转Java被分到架构组,边缘化人员,无所事事 哈哈哈哈) 记录一下前段时间用到的.NET框架下采用并行策略充分利用多核CPU进行优化的一个方法 起因是项目中有个结算的方法,需要汇总一个月的数据在内存中进行计算,统计,分组 ,然后产生新的数据 在某个客户那部署后发现,这个方法
使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能 使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能 使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能
C# 开源浏览器性能提升,体验Chrome级速度
前言 使用 C# 和 CefSharp 开发的全功能网页浏览器。 项目介绍 SharpBrowser 是目前最快的开源 C# 网页浏览器! 采用了轻量级的 CEF 渲染器,在呈现网页时甚至比 Google Chrome 更快。 我们对比了所有可用的.NET 浏览器引擎,最终选择了高性能的 CefSh
C# 开源浏览器性能提升,体验Chrome级速度 C# 开源浏览器性能提升,体验Chrome级速度 C# 开源浏览器性能提升,体验Chrome级速度
Java Web 拾遗
许是年纪大了,老是回忆起以前的点点滴滴。翻看当初的代码,如同偶遇多年未见的前女友,曾经一起深入交流的情谊在颔首之间消散,令人烦躁。 今天就来聊聊老生常谈的 Java Web 开发。缘于一个简单的Spring Boot项目改造,笔者看着一坨注解和配置,苦于拾掇记忆的痛苦,择其一二记录,纪念逝去的青春。
Java序列化、反序列化、反序列化漏洞
目录1 序列化和反序列化1.1 概念1.2 序列化可以做什么?3 实现方式3.1 Java 原生方式3.2 第三方方式4 反序列化漏洞 1 序列化和反序列化 1.1 概念 Java 中序列化的意思是将运行时的对象转成可网络传输或者存储的字节流的过程。而反序列化正相反,是把字节流恢复成对象的过程。 1
SelMatch:最新数据集蒸馏,仅用5%训练数据也是可以的 | ICML'24
数据集蒸馏旨在从大型数据集中合成每类(IPC)少量图像,以在最小性能损失的情况下近似完整数据集训练。尽管在非常小的IPC范围内有效,但随着IPC增加,许多蒸馏方法变得不太有效甚至性能不如随机样本选择。论文对各种IPC范围下的最先进的基于轨迹匹配的蒸馏方法进行了研究,发现这些方法在增加IPC的情况下很
SelMatch:最新数据集蒸馏,仅用5%训练数据也是可以的 | ICML'24 SelMatch:最新数据集蒸馏,仅用5%训练数据也是可以的 | ICML'24 SelMatch:最新数据集蒸馏,仅用5%训练数据也是可以的 | ICML'24
这才是批量update的正确姿势!
前言 最近我有位小伙伴问我,在实际工作中,批量更新的代码要怎么写。 这个问题挺有代表性的,今天拿出来给大家一起分享一下,希望对你会有所帮助。 1 案发现场 有一天上午,在我的知识星球群里,有位小伙伴问了我一个问题:批量更新你们一般是使用when case吗?还是有其他的批量更新方法? 我的回答是:咱
这才是批量update的正确姿势!
SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用
SimpleAIAgent是基于C# Semantic Kernel 与 WPF构建的一款AI Agent探索应用。主要用于使用国产大语言模型或开源大语言模型构建AI Agent应用的探索学习,希望能够帮助到感兴趣的朋友。 接下来我想分享一下我的AI Agent应用实践。 翻译文本并将文本存入文件
SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用 SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用 SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用
.net 到底行不行!2000 人在线的客服系统真实屏录演示(附技术详解) 📹
时常有朋友问我性能方面的问题,正好有一个真实客户,在线的访客数量达到了 2000 人。在争得客户同意后,我录了一个视频。升讯威在线客服系统可以在极低配置的服务器环境下,轻松应对这种情况,依然可以做到消息毫秒级送达,操作毫秒级响应。
.net 到底行不行!2000 人在线的客服系统真实屏录演示(附技术详解) 📹 .net 到底行不行!2000 人在线的客服系统真实屏录演示(附技术详解) 📹 .net 到底行不行!2000 人在线的客服系统真实屏录演示(附技术详解) 📹