后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载导读本文以 Apereo CAS 官方文档《JWT Secured Authorization Response Mode (JARM) - OpenID Connect Authentication》为主体结合仓库源码support/cas-server-support-oidc与support/cas-server-support-oidc-core-api系统讲解如何在 CAS 中以 JWT 形式编码 OIDC 授权响应。读完本文你将掌握如何为依赖方Relying Party启用 JARM、三种响应模式query.jwt、fragment.jwt、form_post.jwt的区别与选型、JWT 响应的签名与加密机制以及cas.authn.oidc.jarm.*配置项的底层实现原理。JARM 是什么用 JWT 加固 OIDC 授权响应JWT Secured Authorization ResponseJARM是 OpenID Connect 的一种扩展机制允许授权服务器Authorization Server不再将授权响应参数如code、state以明文形式逐项返回给客户端而是将它们整体编码进一个 JWT 中。在 CAS 中这意味着授权响应可以像 ID Token 或 Access Token 一样被签名和可选加密后再交付给依赖方。从安全角度看JARM 带来四个核心价值消息完整性Message Integrity签名保证响应内容在传输途中未被篡改发送方认证Sender Authentication依赖方可通过验签确认响应确实由授权服务器CAS签发受众限制Audience RestrictionJWT 携带aud声明可校验响应是否专门发给当前客户端防混合攻击Protection from Mix-up Attacks绑定iss/aud后可有效抵御跨客户端混淆攻击。此外对响应进行加密还能提供机密性Confidentiality防止code、state等参数值在 URL 或日志中被泄露。需要特别说明的是签名/加密策略与 CAS 处理 ID Token、Access Token 的策略完全一致官方文档原文“should quite similar to that of ID tokens or access tokens”底层复用同一套 JWKS 与密码学执行器因此已配置过 OIDC 令牌签名/加密的部署几乎零成本即可启用 JARM。为依赖方启用 JARMresponseMode配置在 CAS 的 JSON 服务注册表中一个OidcRegisteredService可以通过responseMode属性标记为“使用 JWT 授权响应”。官方文档给出的最小配置示例如下{ class: org.apereo.cas.services.OidcRegisteredService, clientId: client, serviceId: https://app.example.org/redirect, name: Sample, id: 1, scopes : [ java.util.HashSet, [ profile, openid ] ], supportedResponseTypes: [ java.util.HashSet, [ code ] ], responseMode: query.jwt }关键字段说明字段作用示例值class必须是OidcRegisteredServiceJARM 仅对 OIDC 依赖方生效org.apereo.cas.services.OidcRegisteredServiceclientId客户端标识同时将作为 JWT 中aud声明的取值来源clientserviceId客户端的 redirect URIJARM 响应将发送到此地址https://app.example.org/redirectsupportedResponseTypes本示例只支持code流程JARM 与授权码流程配合最典型[ code ]responseModeJARM 的开关取值query.jwt、fragment.jwt或form_post.jwtquery.jwt需要强调的是responseMode也可由客户端在授权请求中通过response_mode参数动态指定当服务定义中显式配置了responseMode时CAS 将按该值处理授权响应。启用后CAS 不再返回逐个明文参数code...state...而是只返回一个response参数其值为完整 JWT。JWT 授权响应的内容与 Claims 结构当授权成功时CAS 将授权响应参数打包进 JWT。官方文档给出了一个成功的code授权响应的 JWT Claims 示例{ iss: https://sso.example.com/cas/oidc, aud: client, exp: 1311281970, code: OC-1-..., state: ... }各声明含义如下iss签发者即 CAS 的 OIDC 签发者地址如https://sso.example.com/cas/oidcaud受众即依赖方的clientId用于校验响应只面向该客户端expJWT 过期时间Unix 时间戳由cas.authn.oidc.jarm.expiration控制默认 60 秒详见下文配置章节code本次授权生成的授权码state客户端在授权请求中携带的状态值原样回传用于 CSRF 防护。从源码可以印证上述 claims 的构建过程在 BaseOAuth20JwtResponseModeBuilder.java 中CAS 使用 Nimbus JOSE 的JWTClaimsSet.Builder依次设置issuer取自ctx.getIssuerService().determineIssuer(...)、expirationTime取自 JARM 配置的过期时长、audience取自oidcService.getClientId()随后将授权响应产生的全部参数code、state等通过parameters.forEach(claimsBuilder::claim)逐一写入 claims最后交给ctx.getResponseModeJwtBuilder().build(...)完成签名/加密并输出 JWT 字符串。三种 JWT 响应模式详解CAS 支持三种 JWT 响应模式区别仅在于“把 JWT 塞进 HTTP 响应的哪个位置、用什么方式传给客户端”。官方文档以 tab 形式分别给出了每种模式的行为与 HTTP 示例下面逐一展开并给出对应的源码实现佐证。模式一query.jwtQuery 组件传输query.jwt模式下CAS 将授权响应以 HTTP 302 重定向发送到客户端的 redirect URI并把名为response的参数值为 JWT附加到重定向地址的query 组件?之后HTTP/1.1 302 Found Location: https://app.example.org/redirect?responseeyJraWQiOiJsYWViIiwiYWxnIjoiRVMyN...这是 JARM 最常用的默认模式兼容性最好。源码层面由 OidcResponseModeQueryJwtBuilder.java 实现构建出 JWT 后返回new RedirectView(redirectUrl)与Map.of(response, token)组成的ModelAndViewSpring MVC 据此生成带 query 参数的 302 重定向该构建器的getResponseMode()返回OAuth20ResponseModeTypes.QUERY_JWT。模式二fragment.jwtFragment 组件传输fragment.jwt模式下CAS 同样以 HTTP 302 重定向发送授权响应但response参数JWT被放到重定向地址的fragment 组件#之后HTTP/1.1 302 Found Location: https://app.example.org/redirect#responseeyJraWQiOiJsYWViIiwiYWxnIjoiRVMyN...该模式对单页应用SPA尤其友好fragment 不会随请求发送到服务器因此 JWT 不会出现在服务器访问日志中客户端 JavaScript 可直接从location.hash中读取response。其实现对应 OidcResponseModeFragmentJwtBuilder.java逻辑与query.jwt构建器一致仅返回视图的组件位置不同getResponseMode()返回FRAGMENT_JWT。模式三form_post.jwtHTTP POST 表单传输form_post.jwt模式下CAS 不再使用重定向而是向客户端的 redirect URI 发起 HTTPPOSTresponse参数JWT被编码为 HTML 表单的隐藏字段值页面加载后自动提交auto-submit表单体以application/x-www-form-urlencoded格式传输。该模式适合希望授权响应走 POST 语义、且对 URL 长度敏感的部署场景JWT 通常比明文参数串更长query/fragment 模式可能触碰 URL 长度上限。源码实现见 OidcResponseModeFormPostJwtBuilder.java构建 JWT 后以CasWebflowConstants.VIEW_ID_POST_RESPONSE作为视图名渲染一个自动提交表单模型包含originalUrl与Map.of(response, token)并以 HTTP 200 状态返回getResponseMode()返回FORM_POST_JWT。三种模式对比小结响应模式传输方式参数位置典型场景源码实现类query.jwt302 重定向URL query?response...通用后端回调OidcResponseModeQueryJwtBuilderfragment.jwt302 重定向URL fragment#response...单页应用SPAOidcResponseModeFragmentJwtBuilderform_post.jwtHTML 表单自动提交POST请求体application/x-www-form-urlencoded避免 URL 过长、需要 POST 语义OidcResponseModeFormPostJwtBuilder签名与加密与 ID Token / Access Token 同源的安全机制JARM 生成的 JWT 响应与 CAS 签发的 ID Token、Access Token 使用同一套签名/加密管线其入口是 OidcJwtResponseModeCipherExecutor.java。该类继承自BaseOidcJwtCipherExecutor构造时接收 CAS 的默认 JWKS 缓存LoadingCacheOidcJsonWebKeyCacheKey, JsonWebKeySet与OidcIssuerService其逻辑名称为OpenID Connect Response Mode JWT。这意味着签名CAS 使用其 OIDC 签名密钥JWKS 中的 RSA/EC 私钥或共享 HMAC 密钥对 JWT 响应签名依赖方可用 CAS 的 JWKS 公钥验签加密可选可进一步用依赖方的公钥对 JWT 响应加密保证code、state等参数的机密性密钥管理与 ID Token 共用cas.authn.oidc.jwks.*体系无需为 JARM 单独维护密钥。该执行器有专门的单元测试覆盖见 OidcJwtResponseModeCipherExecutorTests.java可用于验证签名/加密在本地环境的行为。配置参数cas.authn.oidc.jarmJARM 的全局配置通过cas.authn.oidc.jarm.*属性完成官方文档以{% include_cached casproperties.html propertiescas.authn.oidc.jarm %}的形式挂载了完整属性参考。目前核心配置项定义在 OidcJwtAuthorizationResponseModeProperties.java 中并在 OidcProperties.java 中通过jarm字段挂载到 OIDC 属性树。配置属性类型默认值说明cas.authn.oidc.jarm.expiration时长DurationCapable支持如PT60S、5mPT60S60 秒JARM 响应 JWT 的硬超时时间到期后 JWT 失效以application.properties为例# 将 JARM 响应 JWT 的有效期调整为 2 分钟 cas.authn.oidc.jarm.expirationPT2M底层行为可从 BaseOAuth20JwtResponseModeBuilder.getExpirationDate() 验证CAS 读取casProperties.getAuthn().getOidc().getJarm().getExpiration()通过Beans.newDuration(...)将其解析为秒数然后以 UTC 当前时间为基准向后累加得到exp声明的时间戳。需要留意的是该模块通过RequiresModule(name cas-server-support-oidc)声明依赖即只有引入 OIDC 支持模块cas-server-support-oidc时该配置项才生效。源码结构全景JARM 相关类速查若希望深入阅读 JARM 的实现可按以下路径在仓库中定位核心代码响应模式构建器基类BaseOAuth20JwtResponseModeBuilder.javaclaims 组装与过期时间三种模式构建器OidcResponseModeQueryJwtBuilder.java、OidcResponseModeFragmentJwtBuilder.java、OidcResponseModeFormPostJwtBuilder.java签名/加密执行器OidcJwtResponseModeCipherExecutor.java 及同包下的 OidcRegisteredServiceJwtResponseModeCipherExecutor.java配置模型OidcJwtAuthorizationResponseModeProperties.java装配与测试OidcConfiguration.java各 builder 的 Bean 装配入口、OidcJwtResponseModeCipherExecutorTests.java测试用例实战校验清单接入 JARM 时建议按以下清单逐项确认依赖方类型服务定义必须是OidcRegisteredService见上文 JSON 示例并显式配置responseMode为query.jwt、fragment.jwt或form_post.jwt之一模块依赖确认部署已引入cas-server-support-oidc模块否则cas.authn.oidc.jarm.*配置与 JARM 行为均不会生效密钥就绪由于响应 JWT 与 ID Token 共用签名/加密管线需确保 OIDC JWKS 配置cas.authn.oidc.jwks.*已正确就绪依赖方持有可用的验签公钥有效期匹配按需调整cas.authn.oidc.jarm.expiration默认 60 秒确保客户端在回调处理链路中的验签与取码逻辑能在 JWT 过期前完成回调适配query.jwt/fragment.jwt客户端从 URL 的 query/fragment 中解析response参数form_post.jwt客户端需接受自动提交的表单 POST 并从请求体中读取response。至此从依赖方配置、三种响应模式选型到签名/加密与过期策略CAS 的 JARM 能力已完整覆盖可依据上述路径直接在生产环境中落地并继续深入源码排障。赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐Apereo CAS OpenID Connect JWT Bearer 授权模式JWT Authorization Grant接入指南Apereo CAS OpenID Connect JWT Bearer 授权模式JWT Authorization Grant接入指南 JWT Beare后端认证鉴权单点登录Spring Authorization Server OIDC支持OpenID Connect完整配置指南Spring Authorization Server OIDC支持OpenID Connect完整配置指南 Spring Authorization Ser后端认证鉴权身份认证Apereo CAS OAuth 客户端 Response Mode 配置指南query、fragment 与 form_post 的完整实现解析Apereo CAS OAuth 客户端 Response Mode 配置指南query、fragment 与 form_post 的完整实现解析 本指南以后端认证鉴权单点登录创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
使用 Skia 的 PDF 后端(SkPDF)生成文档:SkDocument/SkCanvas 实战与能力边界 图形学图像处理 【免费下载链接】skia Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. 项目地址: https://gitcode.com/gh_mirrors/skia1/skia 点击查看 免费下载 Skia 的 PDF 后端(SkPDF)允许开发者复用… · 2026/9/26 8:22:33
KoboldCpp本地部署实战:GGUF模型与硬件精准匹配指南 1. 为什么是 KoboldCpp 而不是 Ollama 或 LM Studio?——本地 AI 创作平台的选型真相你刚在 GitHub 上搜到“本地跑大模型”,页面刷出二十多个项目:Ollama、LM Studio、Text Generation WebUI、llama.cpp 原生 CLI、甚至还有打包成 EXE 的“一… · 2026/9/26 8:22:26
ACCD娱乐设计专业深度解析:概念设计、动画与游戏美术的工业级培养体系 艺术中心设计学院(ArtCenter College of Design,业内习惯简称ACCD,国内圈子里更多叫“艺术中心”)的娱乐设计专业,一直是概念设计、游戏美术、动画方向申请者和从业者绕不开的一个名字。我见过不少人在微博、ArtStatio… · 2026/9/26 8:22:26
Atlas 300V 24G部署YOLO实战:环境配置、模型转换与推理优化全解析 最近在後台和幾個技術群裡,被問得比較多的一個問題,就是Atlas 300V 24G這張卡能不能跑YOLO,以及怎麼把手裡的PyTorch權重遷移上去。今天就把我實際部署的完整過程,環境、驅動、模型轉換、推理代碼、性能調優,全部整理出… · 2026/9/26 8:59:35
反无人机技术硬参数解析:激光/雷达/射频三大系统实战标定 简介:本资源是一份聚焦军事科技前沿的深度分析报告,面向国防科研人员、军事爱好者、安全领域从业者及高校相关专业师生,系统梳理国外反无人机技术发展现状与趋势,助力读者把握电磁对抗、激光拦截、网络攻防等新型防御手段的核心逻… · 2026/9/26 8:59:29
CRM系统落地全攻略:从选型到自动化配置与数据迁移 1. 客户数据乱成一锅粥:DeskcommCRM 被我们选中的原因先说说为什么我们会在这个时间点引入 DeskcommCRM。团队规模并不大,二十几条人,销售加客服加实施加在一起,原本靠一张共享表格和微信群硬撑。表面上看流程都能跑,但… · 2026/9/26 8:59:29
Atlas 300V 24G 推理加速卡实战:YOLO 部署与调优全流程 最近后台总有人问我两个问题:Atlas 300V 24G 到底算不算“运算加速卡”,还有 atlas 部署 YOLO 的实战流程是不是像网上说的那么折腾。我刚好在工业质检场景里用这张卡跑了半年多的 YOLOv5 和 YOLOv8,从模型转换到多路视频流推理都折腾过一遍&… · 2026/9/26 8:59:29
Atlas 300V部署YOLO全流程:从环境搭建到模型上卡的实战指南 如果在搜索引擎里搜“atlas 部署 yolo”,看到的往往是一堆官方文档链接和零散的踩坑帖,很少有人把从硬件识别到模型上卡的完整链路讲清楚。我手上这块 24G 显存的 Atlas 300V 已经在公司推理服务器上跑了四个多月,前前后后用同一套流程部署过… · 2026/9/26 8:59:29
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46