ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Apereo CAS 委托认证之 OAuth2.0:通过 Pac4j 集成外部 OAuth2 身份提供方实战指南

Apereo CAS 委托认证之 OAuth2.0:通过 Pac4j 集成外部 OAuth2 身份提供方实战指南 后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载本文是 Apereo CAS 委托认证Delegated Authentication系列中针对OAuth2.0 身份提供方的专项指南面向需要在 CAS 登录页引入 Facebook、GitHub、Google 等标准 OAuth2 提供方或对接任意自定义 OAuth2 服务的部署场景。读完本文你将掌握如何在 WAR overlay 中引入 OAuth2 委托认证模块、如何通过cas.authn.pac4j.oauth2配置体系完成客户端注册与授权端点调优、如何结合服务注册表对 OAuth2 身份提供方做访问控制与自动跳转以及如何排查与调试委托认证流程。委托认证总览CAS 作为 OAuth2 客户端委托认证Delegated Authentication是 CAS 的一项核心能力CAS 借助 Pac4j 库 扮演客户端 / 服务提供方代理的角色将认证过程委托给外部身份提供方IdP支持的提供方类型包括其他 CAS 服务器SAML2 身份提供方OAuth2 提供方Facebook、Twitter、GitHub、Google、LinkedIn 等OpenID Connect 身份提供方Google、Apple 等ADFS本文聚焦其中的OAuth2 提供方场景。CAS 的委托认证机制允许发起认证请求的客户端使用任意协议SAML、OAuth2、OIDC 等例如一个 OAuth2 客户端可以让 CAS 以委托模式去外部 SAML2 IdP、另一台 CAS 服务器或 Facebook 完成认证最终向客户端返回一个 OAuth2 用户画像——CAS 在中间扮演代理完成协议翻译。整体机制请参见 Delegate-Authentication 总览。启用模块依赖在 WAR overlay 中加入以下依赖即可启用 OAuth2 委托认证支持implementation org.apereo.cas:cas-server-support-pac4j-oidc该模块位于仓库 support/cas-server-support-pac4j-oidc 目录下内含 OAuth2/OIDC 客户端构建、webflow 配置如DelegatedAuthenticationOidcWebflowConfigurer、登出传播DelegatedClientOidcLogoutAction以及端点贡献等实现。从源码结构看OAuth2 客户端构建逻辑复用了cas-server-support-pac4j-webflow模块的通用委托认证基础设施因此该模块同样需要存在于 overlay 中。配置体系cas.authn.pac4j.oauth2OAuth2 身份提供方的全部配置统一挂在cas.authn.pac4j.oauth2前缀之下它对应配置模型类 Pac4jOAuth20ClientPropertiesRequiresModule(name cas-server-support-pac4j-webflow)并在 Pac4jDelegatedAuthenticationProperties 中以ListPac4jOAuth20ClientProperties oauth2的形式承载因此该配置天然支持定义多个 OAuth2 提供方列表式配置。必填项客户端凭据与端点继承自 Pac4jIdentifiableClientProperties 的id、secret以及Pac4jOAuth20ClientProperties自身声明的三个端点均为RequiredProperty必填配置项说明cas.authn.pac4j.oauth2[0].id在外部 OAuth2 提供方处申请到的 Client ID支持 SpEL 表达式cas.authn.pac4j.oauth2[0].secretClient Secret支持 SpEL 表达式cas.authn.pac4j.oauth2[0].authUrl提供方的授权端点Authorization Endpointcas.authn.pac4j.oauth2[0].tokenUrl提供方的令牌端点Token Endpointcas.authn.pac4j.oauth2[0].profileUrl提供方的用户画像端点Profile Endpoint用于换取用户信息OAuth2 流程控制参数Pac4jOAuth20ClientProperties提供了一系列流程控制参数可直接对照源码 Pac4jOAuth20ClientProperties.java 理解其默认值与作用配置项默认值说明scope空向身份提供方请求的授权范围Scope多个 scope 以空格或逗号分隔responseTypecode决定认证服务器上的认证流程标准授权码流程保持默认即可withStatefalse是否在向提供方发送认证请求时生成 state 值CSRF 防护profileVerbPOST请求用户画像端点使用的 HTTP 方法clientAuthenticationMethodbasicAuth客户端认证方式basicAuth默认HTTP Basic或requestBody将凭据放入请求体profileAttrs空 Map以键值对形式声明需要收集的画像属性key 为提供方返回的属性名value 为映射到 CAS 侧的属性名无需映射时二者相同customParams空 Map在授权请求等场景中随请求发送的自定义参数键值对关于profileAttrs源码注释给出了非常实用的进阶用法value 可以写成CONVERTER|mapped-attribute形式其中CONVERTER可为Locale、Integer、Color、Date、Gender、Boolean、Long、String、Url等类型转换器还支持内联 Groovy 脚本转换器例如groovy { return attribute -test }|mapped-attributeCAS 会执行脚本完成属性值的变换与映射。客户端展示与行为参数继承自基类以下参数继承自 Pac4jBaseClientProperties对所有委托客户端通用配置项默认值说明clientName空客户端名称主要用于 UI 展示与唯一性标识名称中的非单词字符会被转换为-如This Org (New)→This-Org--New-并追加到登录页跳转链接的class属性上便于对单个 IdP 做自定义样式如组织 LogodisplayName空客户端的展示标题留空时使用客户端原始名称cssClass空分配给该客户端的 CSS 类enabledtrue客户端 / 外部身份提供方是否启用autoRedirectTypeNONE是否自动跳转到该客户端枚举NONE/ 显式自动跳转等详见下文自动跳转principalIdAttribute空身份提供方响应中用于确立已认证用户并构建 CAS profile 的属性callbackUrl空身份提供方完成认证后回跳 CAS 的回调地址未指定时以 CAS 服务器登录端点为基准构造最终回调地址callbackUrlTypeQUERY_PARAMETER回调地址解析方式枚举PATH_PARAMETER/QUERY_PARAMETER/NONEOAuth2 客户端构造函数中默认设置为PATH_PARAMETER客户端名追加到回调路径中propagateLogouttrueCAS 登出时是否将登出请求传播给委托的身份提供方完整 YAML 配置示例综合以上参数一个典型的 OAuth2 委托客户端配置如下cas: authn: pac4j: oauth2: - client-name: MyOAuth2Provider id: my-client-id secret: my-client-secret auth-url: https://provider.example.org/oauth2/authorize token-url: https://provider.example.org/oauth2/token profile-url: https://provider.example.org/oauth2/profile scope: openid profile email response-type: code with-state: true profile-verb: GET client-authentication-method: basicAuth profile-attrs: given_name: givenName family_name: familyName email: email custom-params: audience: cas display-name: Example OAuth2 Provider css-class: oauth2-provider auto-redirect-type: NONE propagate-logout: true注意具体属性书写风格连字符 / 驼峰与 CAS 使用的配置绑定方式保持一致即可。身份提供方注册的多种方式除了直接在配置文件中声明OAuth2 等身份提供方还可通过以下方式动态注册详见 Delegate-Authentication-Provider-Registration 指南JDBC借助cas-server-support-jpa-util模块将提供方配置存放在数据库表JdbcIdentityProviderEntity列id、type、index、name、value中name列的值会追加到配置前缀cas.authn.pac4j之后支持cas、oidc、saml、oauth等类型。REST配置cas.authn.pac4j.rest后CAS 会请求远端 REST 端点端点返回体中需携带 CAS 属性形式如cas.authn.pac4j.github.client-name、cas.authn.pac4j.cas[0].login-url的 JSON 负载且响应码必须为200。缓存提供方注册数据获取后被 CAS 缓存采用可配置的过期策略仅在缓存为空或失效时才重新联系端点且缓存按 CAS 节点各自持有。发现选择与自动跳转登录页发现选择外部身份提供方默认以菜单形式展示在登录页上用户从列表中选择其一完成认证也可以配置动态发现策略依据用户标识用户名、邮箱域名等自动匹配 IdP。动态策略默认支持 JSON 规则文件键为匹配用户标识的正则表达式如.example.org值指定clientName与排序order。详见 Delegate-Authentication-DiscoverySelection 指南。显式自动跳转CAS 可以通过专用链接显式跳转到指定外部身份提供方例如跳转到配置中名为Twitter的客户端https://sso.example.org/cas/clientredirect?client_nameTwitter该示例假设 CAS 默认以查询参数client_name识别提供方名称。更完整的自动跳转与独占策略参见 Delegate-Authentication-Redirection 指南。服务级认证策略与 OAuth2 提供方授权通过服务注册表可以为特定应用约束允许使用的 OAuth2 身份提供方。以下 JSON 服务定义将应用sample的委托认证策略限定为仅允许Facebook与Twitter两个提供方对应 CAS 配置中的客户端名称{ class : org.apereo.cas.services.CasRegisteredService, serviceId : sample, name : sample, id : 100, accessStrategy : { class : org.apereo.cas.services.DefaultRegisteredServiceAccessStrategy, delegatedAuthenticationPolicy : { class : org.apereo.cas.services.DefaultRegisteredServiceDelegatedAuthenticationPolicy, allowedProviders : [ java.util.ArrayList, [ Facebook, Twitter ] ], permitUndefined: true, exclusive: false, selectionStrategy: file:/path/to/script.groovy } } }策略字段说明详见 Delegate-Authentication-AuthenticationPolicy 指南字段说明allowedProviders允许的提供方列表内容为外部身份提供方客户端名称permitUndefined未显式定义允许提供方时是否放行访问exclusive是否将认证独占限定于允许的提供方从而禁用用户名/密码等其他认证方式selectionStrategy以脚本方式决定如何选择并跳转到身份提供方当exclusive为true且仅列出单个提供方时该应用的认证请求会被自动重定向到该提供方登录页选择菜单随之移除。在 DelegatedAuthenticationConfiguration 中RegisteredServiceDelegatedAuthenticationPolicyAuditableEnforcer与DelegatedAuthenticationServiceTicketValidationAuthorizer会在服务票据验证阶段对上述策略执行审计与授权校验是策略生效的底层实现。属性推送将 OAuth2 用户画像属性释放给应用OAuth2 提供方返回的用户画像经 CAS 处理后用户标识始终会推送给 CAS 客户端而用户属性是否推送取决于服务器端配置与客户端验证服务票据的方式。在 CAS 服务器侧需要在期望的服务定义中配置属性释放策略例如仅释放name、first_name、middle_name{ class : org.apereo.cas.services.CasRegisteredService, serviceId : sample, name : sample, id : 100, description : sample, attributeReleasePolicy : { class : org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy, allowedAttributes : [ java.util.ArrayList, [ name, first_name, middle_name ] ] } }其中来自提供方画像的属性名如first_name可通过上文profileAttrs的映射机制重命名为 CAS 侧统一使用的属性名。后处理与 Provisioning后处理Post Processing配置cas.authn.pac4j.core.groovy-provider-post-processor可对提供方在呈现给 UI 之前做后处理典型用途是服务端条件式自动跳转。Groovy 脚本签名与参数详见 Delegate-Authentication-PostProcessing 指南。Provisioning配置下发默认情况下从外部提供方提取并合并进 CAS principal 的用户画像不会被存储或追踪。CAS 支持通过 Groovy 脚本cas.authn.pac4j.provisioning.groovy、REST 端点cas.authn.pac4j.provisioning.rest请求体中携带principalId、profileId、profileAttributes、clientName等字段、SCIM v2cas.authn.pac4j.provisioning.scim或自定义DelegatedClientUserProfileProvisionerBean 将画像同步到外部身份库详见 Delegate-Authentication-Provisioning 指南。登出传播由于 OAuth2 客户端默认propagateLogouttrueCAS 登出时会尝试将登出传播至外部身份提供方。OAuth2/OIDC 模块中 DelegatedClientOidcLogoutAction 与DelegatedClientOidcLogoutRedirectionStrategy承担了登出重定向的编排若不需要传播可将该客户端的propagate-logout置为false。故障排查与日志委托认证涉及的外部库为org.pac4j在 log4j 配置文件中为其开启 debug 级别即可获得详细诊断信息... Logger nameorg.pac4j leveldebug additivityfalse AppenderRef refcasConsole/ AppenderRef refcasFile/ /Logger ...日志内容覆盖 OAuth2 授权请求构造、回调处理、令牌交换与画像提取等关键环节是定位端点配置错误、scope 缺失或属性映射失败的首选手段。进一步阅读Delegate-Authentication 总览含委托认证流程与 MFA 识别Delegate-Authentication-Provider-RegistrationIdP 注册属性 / JDBC / REST / 缓存Delegate-Authentication-DiscoverySelection发现选择策略Delegate-Authentication-Redirection自动跳转与独占Delegate-Authentication-AuthenticationPolicy认证策略Delegate-Authentication-Provisioning画像配置下发Delegate-Authentication-PostProcessing提供方后处理配置模型源码Pac4jOAuth20ClientProperties、Pac4jBaseClientProperties、Pac4jDelegatedAuthenticationProperties赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐Apereo CAS与Shibboleth身份提供者集成指南Apereo CAS与Shibboleth身份提供者集成指南 概述 Apereo CAS作为企业级单点登录解决方案可以与Shibboleth联邦SSO平台进行后端认证鉴权单点登录Apereo CAS 委托认证发现选择机制详解Apereo CAS 委托认证发现选择机制详解 概述 在Apereo CAS系统中委托认证Delegated Authentication是一种允许用户通后端认证鉴权单点登录Apereo CAS 与 ADFS 集成实战基于 WS-Federation 的联合身份认证完全指南Apereo CAS 与 ADFS 集成实战基于 WS Federation 的联合身份认证完全指南 导读 本文围绕 Apereo CAS 与 Microso后端认证鉴权单点登录上一篇Med-ChatGLM终极指南3分钟实现智能医疗AI对话下一篇Vichan模板引擎指南如何自定义主题和界面设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表