后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载导读本文围绕 Apereo CAS 的 OpenID Connect 扩展 ——Native SSO原生单点登录讲解如何让同一厂商旗下的多款移动端或桌面端应用借助设备会话device session实现免跳转、免重复登录的跨应用单点登录体验。读完本文你将掌握device_ssoscope 的配置方式、device_secret的获取流程、基于urn:ietf:params:oauth:grant-type:token-exchange授权类型的直接后台令牌交换back-channel token exchange请求以及与之配套的客户端注册策略与测试验证方法。文中的所有配置示例均可在当前仓库中找到对应源码与端到端测试佐证。什么是 Native SSO为应用套件而生的 OIDC 扩展Native SSO 是 OpenID Connect 的一种扩展机制其目标是为移动端或桌面端应用套件app suite简化用户体验多个应用共享同一个设备上的会话凭据用户只需在其中任意一个应用中完成一次登录其余应用即可静默获得令牌。该扩展依赖的是同一厂商旗下多个应用之间共享 ID token 与设备绑定密钥device-bound secret应用 #1 通过标准的code授权流程完成终端用户认证并在授权请求中携带特殊的device_ssoscope以表明自己希望获得device_secret用于 Native SSO应用 #2 在发现自己的凭据存储credential store中已有 ID token 和device_secret后可以假定用户已登录并直接向 CAS 发起后台令牌交换请求获取新的令牌从而省去跳转到 OpenID ProviderOP再次登录的环节。值得注意的是这种机制要求参与 SSO 的应用之间具备足够的信任级别而这种信任只有在它们属于同一厂商时才具有实际可行性。因此仅提供单一应用的厂商通常不需要关注此扩展。从仓库源码看CAS 在support/cas-server-support-oidc-core/src/main/java/org/apereo/cas/oidc/OidcConstants.java中明确声明了相关常量DEVICE_SECRET device_secret用于 Native SSO 的设备密钥注释指出它包含与设备以及当前在该设备上认证的用户相关的数据DS_HASH ds_hashID token 中携带的哈希值用于建立id_token与所签发device_secret之间的绑定关系CLAIM_SESSION_REF sid_ref会话引用标识可将 ID token 反向关联回会话注册表registry。整体流程两步完成的跨应用静默登录整个 Native SSO 流程可以概括为两大阶段引导阶段应用 #1在线认证客户端应用 #1 使用常规code流程认证终端用户授权请求中附带device_ssoscope向 CAS 表明其意图在授权码交换令牌时CAS 额外返回一个device_secret。静默阶段应用 #2后台令牌交换客户端应用 #2 读取共享凭据存储中的 ID token 与device_secret直接调用 CAS 的令牌端点token endpoint发起 token exchange 请求换取面向自身的 access token / id_token全程无需用户再次跳转登录页。这一流程在仓库的端到端测试ci/tests/puppeteer/scenarios/oidc-token-exchange/script.js中得到了完整验证verifyTokenExchangeNativeSso()首先用client_idclient、scopeopenid email device_sso发起/cas/oidc/authorize请求完成登录并取得授权码随后用授权码换取令牌并断言响应中access_token、id_token、device_secret三者都存在解码 ID token 后校验其携带sid、ds_hash、sid_ref等声明最后以client2:secret2的身份用subject_tokenid_token、actor_tokendevice_secret发起 token exchange成功换取新的 access token 与 id_token。应用配置启用 device_sso scope参与 Native SSO 的客户端应用relying parties必须配置为支持device_ssoscope。该 scope 用于声明此应用打算使用 Native SSO 特性。CAS 在OidcConstants.java的 scope 枚举中对它的语义做了明确注释当授权请求中出现此 scope且授权码被交换为令牌时将返回一个新的device_secret这对 Native SSO 与原生应用授权流程至关重要。一个启用device_sso的 OIDC 注册服务配置示例{ class : org.apereo.cas.services.OidcRegisteredService, clientId: ..., clientSecret: ..., serviceId : ..., name: OIDC, id: 1, scopes : [ java.util.HashSet, [ openid, profile, device_sso ] ] }字段说明class固定为org.apereo.cas.services.OidcRegisteredService标识这是一条 OIDC 类型的注册服务clientId/clientSecret为客户端凭据用于后续的 Basic 认证serviceId为服务匹配规则通常为正则表达式决定哪些回调地址归属该客户端scopes中的device_sso是触发device_secret签发的关键开关。当令牌交换完成后上述 scope 允许认证流程最终生成device_secret令牌端点返回的响应体如下{ access_token : ..., token_type : Bearer, expires_in : 600, scope : openid profile, id_token : eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUl..., device_secret : ... }要点解析expires_in表示 access token 的有效期示例中为 600 秒id_token中会携带sid会话 ID、ds_hash设备密钥绑定哈希、sid_ref会话引用等声明测试脚本script.js对其逐一断言device_secret即为本次设备会话绑定的密钥应安全存放在与该厂商其他应用共享的凭据存储中。此外CAS 在 OpenID 发现配置模型api/cas-server-core-api-configuration-model/src/main/java/org/apereo/cas/configuration/model/support/oidc/OidcDiscoveryProperties.java中也将device_sso列入受支持的 scope 列表说明该 scope 会出现在服务提供方的发现文档discovery document中客户端可据此进行能力探测。令牌交换请求应用 #2 的静默登录当应用 #2 在共享凭据存储中发现 ID token 与device_secret时即可假定用户已登录并向 CAS 发起直接的后台令牌交换请求即 token exchange 请求。前置条件发起令牌交换请求需要满足两个注册配置前提客户端应用必须配置为支持urn:ietf:params:oauth:grant-type:token-exchange授权类型grant type客户端的令牌交换策略token exchange policy必须允许urn:openid:params:token-type:device-secret令牌类型。注册服务完整配置{ class : org.apereo.cas.services.OidcRegisteredService, clientId: ..., clientSecret: ..., serviceId : ..., name: OIDC, id: 1, scopes : [ java.util.HashSet, [ openid, email, profile, device_sso ] ], supportedGrantTypes: [ java.util.HashSet, [ authorization_code, urn:ietf:params:oauth:grant-type:token-exchange ] ], tokenExchangePolicy: { class: org.apereo.cas.support.oauth.services.DefaultRegisteredServiceOAuthTokenExchangePolicy, allowedTokenTypes: [ java.util.HashSet, [ urn:openid:params:token-type:device-secret, urn:ietf:params:oauth:token-type:access_token, urn:ietf:params:oauth:token-type:id_token ] ] } }配置说明supportedGrantTypes中同时包含authorization_code用于常规登录引导与urn:ietf:params:oauth:grant-type:token-exchange用于静默换发令牌tokenExchangePolicy.allowedTokenTypes决定了本次交换允许涉及的令牌类型其中urn:openid:params:token-type:device-secret是 Native SSO 场景的关键项。请求参数发起令牌交换请求时需要按如下规则填充参数请求参数取值grant_typeurn:ietf:params:oauth:grant-type:token-exchangesubject_token应用 #1 流程中获得的 ID tokensubject_token_typeurn:ietf:params:oauth:token-type:id_tokenactor_token应用 #1 流程中获得的device_secretactor_token_typeurn:openid:params:token-type:device-secretrequested_token_typeurn:ietf:params:oauth:token-type:access_token或urn:ietf:params:oauth:token-type:id_tokenscope本次希望获得的权限范围如openid profileresource可选目标资源标识用于限定令牌的受众audience其中subject_token主题令牌代表被交换的主体身份——即 ID token 所声明的终端用户actor_token参与者令牌代表发起交换的设备身份——即此前签发的device_secretrequested_token_type指明期望换取的令牌类型。源码级实现印证CAS 在support/cas-server-support-oauth-api/src/main/java/org/apereo/cas/support/oauth/OAuth20TokenExchangeTypes.java中定义了上述令牌类型枚举ACCESS_TOKEN(urn:ietf:params:oauth:token-type:access_token)DEVICE_SECRET(urn:openid:params:token-type:device-secret)——注释明确指出在 Native SSO 流程中允许基于参与者令牌actor token将设备密钥交换为访问令牌ID_TOKEN(urn:ietf:params:oauth:token-type:id_token)而令牌交换策略的落地实现在support/cas-server-support-oauth-services/src/main/java/org/apereo/cas/support/oauth/services/DefaultRegisteredServiceOAuthTokenExchangePolicy.javaisTokenExchangeAllowed(...)方法通过allowedResources、allowedAudience、allowedTokenTypes三项正则匹配来裁决是否允许交换canSubjectTokenActAs(...)方法通过allowedActorTokenTypes与requiredActorTokenAttributes来约束作为参与者的令牌/主体是否被允许以该身份行动即校验 actor token 的类型与必要属性。两个方法均为allowedXxx null时放行的宽松语义字段未配置则不做限制配合接口RegisteredServiceOAuthTokenExchangePolicy位于同目录RegisteredServiceOAuthTokenExchangePolicy.java共同构成完整的可扩展策略体系。端到端验证仓库测试场景剖析仓库中的 puppeteer 端到端测试ci/tests/puppeteer/scenarios/oidc-token-exchange/为我们演示了完整的 Native SSO 场景包含两条注册服务配置Sample-1.jsonclient应用scopes 含openid email profile device_ssotoken exchange policy 中allowedTokenTypes覆盖 device-secret / access_token / id_token / jwt并限定allowedResources为^https://localhost:9859/anything/backend.*Sample-2.jsonclient2应用scopes 为openid profile同样启用 token-exchange 授权类型并允许 device-secret 令牌类型。测试脚本script.js的核心断言逻辑包括引导阶段以openid email device_ssoscope 走 authorize 流程换码后断言响应同时包含access_token、id_token、device_secret解码 ID token断言其携带sid、ds_hash、sid_ref且aud为client静默阶段换 access token以client2身份 POST 令牌端点携带subject_tokenid_token、subject_token_typeurn:ietf:params:oauth:token-type:id_token、actor_tokendevice_secret、actor_token_typeurn:openid:params:token-type:device-secret断言响应返回 access token、issued_token_type为urn:ietf:params:oauth:token-type:access_token静默阶段换 id_token同样的 actor/subject 参数将requested_token_type设为 id_token 类型断言响应包含新的 id_token且其aud变为client2、sid仍然存在。同时同一场景还覆盖了常规的 access token 互换access_token → access_token / jwt / id_token用于验证 token exchange 功能在非 Native SSO 场景下的通用行为。常见问题与注意事项单应用厂商不需要此扩展Native SSO 依赖多个应用间共享 ID token 与设备密钥只有同一厂商的应用套件才具备所需的信任基础device_secret的安全性它是绑定设备的秘密应仅存储于受保护的设备凭据存储中避免经不安全的通道传输ds_hash用于将 ID token 与device_secret绑定防止跨设备滥用策略字段的宽松语义DefaultRegisteredServiceOAuthTokenExchangePolicy中allowedTokenTypes、allowedResources、allowedAudience、allowedActorTokenTypes等字段若未配置默认放行 null时不限制生产环境建议显式收紧scope 必须显式声明device_sso需要出现在注册服务的scopes中否则 CAS 不会在令牌响应中签发device_secret授权类型必须显式声明urn:ietf:params:oauth:grant-type:token-exchange需要加入supportedGrantTypes否则令牌端点将拒绝 token exchange 请求。延伸阅读OAuth 协议令牌交换流程详解token exchange 授权类型的通用协议说明OpenID Connect 认证配置OIDC 注册服务的基础配置方式令牌交换策略实现DefaultRegisteredServiceOAuthTokenExchangePolicy.java端到端测试脚本oidc-token-exchange/script.js 与配套的服务配置 Sample-1.json、Sample-2.json。赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐Authelia 与 Glitchtip 集成OpenID Connect 1.0 单点登录SSO配置实战指南Authelia 与 Glitchtip 集成OpenID Connect 1.0 单点登录SSO配置实战指南 本指南详细讲解如何将自托管错误跟踪平台 G后端认证鉴权单点登录身份认证应用安全book-to-skill 快速上手指南一键把技术书变成按需加载的 Agent 技能最多省 51 倍 tokenbook to skill 快速上手指南一键把技术书变成按需加载的 Agent 技能最多省 51 倍 token 上周你让 Agent 帮你审一段重试逻辑AI 技能Apereo CAS 中 OpenID Connect 的 WebFinger Issuer Discovery 实战指南Apereo CAS 中 OpenID Connect 的 WebFinger Issuer Discovery 实战指南 本篇技术指南围绕 Apereo CA后端认证鉴权单点登录创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Simscape液压泵数字孪生建模与预测性维护算法实现 简介:一套基于Simscape的液压泵数字孪生建模与预测性维护算法资源包,面向工业设备健康管理、故障诊断与PHM算法开发者,也适用于科研入门、课程设计及设备管理系统预研,解决动态工况下机械振动、流体脉动与磨损演化耦合建模及剩余使… · 2026/9/25 10:19:13
天津知名的打印机维修机构合作实力参考,省心不踩坑 行业基础科普:打印机维修服务的核心属性与应用范围打印机、复印机这类办公文印设备,是当代企业日常办公必不可少的硬件支撑,无论是日常合同打印、报表输出,还是图文店批量生产、工程现场资料复印,都离不开稳定运行的文… · 2026/9/25 10:19:13
PaddleSeg PanopticSeg 全景分割标签编码协议(pan_id)深度解析 人工智能计算机视觉预训练 【免费下载链接】PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting,… · 2026/9/25 10:19:13
智能体技能库搭建全解析:从技能工程到实战避坑 这就是“agent-skills”在实战中最真实的三个回答:一方面,它告诉你智能体的能力边界不是模型决定的,而是你给它装备了多少可落地的技能;另一方面,它逼着你把“让模型变聪明”的模糊愿望,翻译成“有输入、有… · 2026/9/25 11:39:33
AI Agent中的function call详解:用TaoToken统一Key打通工具调用链路 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 11:39:33
Apache Iceberg Spark 查询指南:SQL、DataFrame、时态旅行与元数据表实战 数据湖大数据数据存储 【免费下载链接】iceberg Apache Iceberg 项目地址: https://gitcode.com/gh_mirrors/icebe/iceberg 点击查看 免费下载 Apache Iceberg 通过 Spark 的 DataSourceV2 API 实现了完整的查询能力,本文基于仓库中的 spark-queries.md… · 2026/9/25 11:39:33
Agent工具调用失败处理:结构化错误与自主恢复实践 1. 工具运行时的核心设计哲学1.1 为什么“失败”值得被当作一等公民做 Agent 开发的人都有一个共识:工具调用是整个系统里最容易出问题的环节。模型再聪明,一旦进入 toolRun 阶段,面对的就是真实世界的混沌——网络抖动、参数格式错误、第三方… · 2026/9/25 11:39:33
如何在 VS Code 中为 GitHub Copilot 配置 TaoToken 统一 Key 以节省额度 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 11:39:33
rkt 集成生态全景:容器编排、镜像分发、安全与监控的一体化对接指南 容器运行时云原生网络 【免费下载链接】rkt [Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards. 项目地址: https://gitcode.com/gh_mirrors/rk/rkt 点击查看 免费下载 rkt 是一个面向 Linux 的… · 2026/9/25 11:39:27
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37