后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载本指南聚焦 Apereo CAS 与 Amazon Web Services 的专用集成方案核心是让 CAS 作为统一身份认证入口通过cas-server-support-aws模块暴露的awsStsActuator 端点为已认证用户签发 AWS Security Token ServiceSTS临时安全凭证从而把 CAS 的认证与授权能力无缝衔接到 AWS 生态如 AWS CLI、各类 AWS 服务调用。读完本文你将掌握如何在 CAS Overlay 中引入该模块、完整配置cas.amazon-sts.*属性、理解AssumeRole与GetSessionToken两种凭证签发策略并能通过源码级分析把握其底层调用链与安全边界。概览CAS 与 AWS 的集成策略Apereo CAS 提供了一套专门针对 AWS 的集成机制支持将 CAS 认证后的主体Principal转换为 AWS 临时安全凭证。该功能通过cas-server-support-aws模块实现在 Overlay 工程中添加如下依赖即可启用implementation org.apereo.cas:cas-server-support-aws该模块的自动装配入口为 CasAmazonCoreAutoConfiguration它通过ConditionalOnFeatureEnabled(feature CasFeatureModule.FeatureCatalog.Core, module aws)控制模块启用并以ConditionalOnAvailableEndpoint按需注册awsSts端点 Bean。也就是说只有当端点被显式暴露且模块被启用时相关能力才会加载体现了 CAS 一贯的“按需装配”设计。从依赖管理看cas-server-support-aws在 gradle/dependencies.gradle 中汇聚了 AWS SDK 核心库software.amazon.awssdk:core、awssts、verifiedpermissions等组件并对commons-logging、httpclient、jackson等传递依赖做了统一排除避免与 CAS 自身依赖冲突。配置cas.amazon-sts.*属性详解所有与 STS 相关的配置均以cas.amazon-sts为前缀。这些属性定义于 AmazonSecurityTokenServiceProperties并继承自 BaseAmazonWebServicesProperties。核心属性如下配置键类型说明cas.amazon-sts.credential-access-keyString必填AWS Access Key用于向 STS 发起认证支持 Spring 表达式语言SpEL解析cas.amazon-sts.credential-secret-keyString必填AWS Secret Key配合 Access Key 使用同样支持 SpELcas.amazon-sts.regionString必填AWS 区域标识例如us-east-1留空时回退为aws-globalcas.amazon-sts.endpointString必填AWS 自定义端点地址可用于指向本地模拟服务如 LocalStackcas.amazon-sts.profile-nameString使用的 AWS 配置文件credentials 文件中的 Profile 名称cas.amazon-sts.profile-pathStringAWS Profile 文件的自定义路径cas.amazon-sts.principal-attribute-nameString必须存在于认证主体属性中的属性名用于授权校验cas.amazon-sts.principal-attribute-valueString正则对主体属性值执行的正则匹配模式用于进一步收紧授权cas.amazon-sts.rbac-enabledboolean是否启用基于角色的凭证获取对应 STSAssumeRole默认falsecas.amazon-sts.max-connectionsintHTTP 最大连接数默认10cas.amazon-sts.connection-timeoutDuration连接超时默认5000毫秒cas.amazon-sts.socket-timeoutDurationSocket 超时默认5000毫秒cas.amazon-sts.client-execution-timeoutDuration客户端执行超时默认10000毫秒cas.amazon-sts.use-reaperboolean是否启用空闲连接回收Reapercas.amazon-sts.proxy-hostString可选代理主机地址cas.amazon-sts.proxy-username/proxy-passwordString代理认证凭据cas.amazon-sts.retry-modeString重试模式可选STANDARD/LEGACY默认STANDARDcas.amazon-sts.local-addressString绑定本地地址其中principal-attribute-name与principal-attribute-value的语义在源码中体现得非常清晰AmazonSecurityTokenServiceEndpoint 的authorizePrincipal方法会先检查主体属性中是否包含指定属性名若属性值非空还会用RegexUtils.find(amz.getPrincipalAttributeValue(), value.toString())做正则匹配任何一步失败都会返回401 Unauthorized与 Authorization failure。一个完整的配置示例cas.amazon-sts.credential-access-key${AWS_ACCESS_KEY} cas.amazon-sts.credential-secret-key${AWS_SECRET_KEY} cas.amazon-sts.regionus-east-1 cas.amazon-sts.profile-namedefault cas.amazon-sts.max-connections20 cas.amazon-sts.connection-timeout10000 cas.amazon-sts.retry-modeSTANDARD cas.amazon-sts.rbac-enabledtrue cas.amazon-sts.principal-attribute-nameawsroles cas.amazon-sts.principal-attribute-valuearn:aws:iam::.:role/.AmazonSecurityTokenServiceProperties类通过RequiresModule(name cas-server-support-aws)标注了前置模块依赖确保这些配置只有在相应模块存在时才生效。Actuator 端点awsStsCAS 通过 Actuator 端点awsSts对外提供临时凭证签发能力端点类 AmazonSecurityTokenServiceEndpoint 标注了Endpoint(id awsSts, defaultAccess Access.NONE)默认不开放访问需要显式配置management.endpoint.awsSts.accessUNRESTRICTED management.endpoints.web.exposure.includeawsSts调用方式awsSts端点只接受 HTTPPOST请求体采用application/x-www-form-urlencoded格式。认证与授权信息通过表单字段携带支持以下参数参数位置说明username/password表单调用方的 CAS 凭据端点会先通过RestAuthenticationService完成认证duration表单临时凭证有效期ISO-8601 时长默认PT15S15 秒tokenQueryMFA 令牌码用于GetSessionToken/AssumeRole的 MFA 校验serialNumberQueryMFA 设备序列号可选roleArnQuery目标角色 ARNRBAC 模式下指定具体角色profileQuery覆盖默认的 AWS Profile 名称典型的curl调用curl -k -X POST https://localhost:8443/cas/actuator/awsSts \ -H Content-Type: application/x-www-form-urlencoded \ -d usernamecasuserpasswordMellondurationPT15S成功时端点返回200 OK响应体是可直接写入~/.aws/credentials的 INI 格式内容[default] aws_access_key_id... aws_secret_access_key... aws_session_token... regionus-east-1这一输出格式由端点内部的createOutputResponse方法构造它依次写入aws_access_key_id、aws_secret_access_key、aws_session_token并在region为空时回退为Region.AWS_GLOBAL即aws-global与 AWS SDK 的ProfileProperty常量一一对应保证了输出可直接被 AWS CLI 读取。仓库中的 Puppeteer 端到端场景 aws-sts-credentials/script.js 验证了这一点它向/cas/actuator/awsSts提交usernamecasuserpasswordMellondurationPT15S并断言响应中包含aws_access_key_id、aws_secret_access_key、aws_session_token三个键。对应的 script.json 展示了配套的运行时参数--cas.amazon-sts.endpointhttp://127.0.0.1:4566指向 LocalStack 模拟服务。底层调用链端点的执行逻辑分为四步源码路径为 AmazonSecurityTokenServiceEndpoint.java#L109-L181认证调用RestAuthenticationService#authenticate(requestBody, request, response)认证表单中的凭据失败即返回401 Authentication failed授权调用authorizePrincipal校验主体属性见上文失败返回401 Authorization failure构建 STS 客户端通过ChainingAWSCredentialsProvider.getInstance(...)解析凭证链再经AmazonClientConfigurationBuilder.prepareSyncClientBuilder(...)应用区域、端点、超时、代理、重试策略等配置签发凭证根据rbacEnabled分支分别走AssumeRoleRequest或GetSessionTokenRequest并返回格式化输出。AWS 客户端构建细节AmazonClientConfigurationBuilder 承担了 AWS SDK 客户端的统一装配使用 Apache HTTP 客户端可配置代理ProxyConfiguration、空闲连接回收useIdleConnectionReaper、三类超时socket / connection / connection-acquisition并支持ClientOverrideConfiguration注入RetryModeregion为空时回退Region.AWS_GLOBALendpoint非空时通过endpointOverride覆盖目标地址。此外模块还提供 AmazonEnvironmentAwareClientBuilder供其他 AWS 集成以${prefix}.credential-access-key之类的 Spring Environment 属性方式构建客户端。临时安全凭证获取策略之一RolesAssumeRole在cas.amazon-sts.rbac-enabledtrue时CAS 走 STS 的AssumeRoleAPI 操作获取临时安全凭证。该方式通常用于账户内授权或跨账户访问。角色信息以“预定义属性”的形式附着于认证主体之上。从 AmazonSecurityTokenServiceEndpoint.java#L141-L171 可以梳理出完整的角色解析逻辑端点从主体属性中取出principal-attribute-name对应的属性值作为候选角色列表值即roleArn列表若主体没有任何角色属性返回401 No roles are available for the authenticated principal若候选角色多于一个且调用方未通过roleArn参数指定返回401并列出当前角色调用方指定的roleArn必须精确匹配候选角色之一角色名不做正则匹配测试用例verifyRoleArnIsNotTreatedAsRegex专门验证了传入arn:aws:iam::.*这类正则无法通过校验否则返回401最终构建AssumeRoleRequestroleSessionName由 CAS 自动生成UUID.randomUUID().toString()同时透传serialNumber与tokenCode以支持 MFA 加固。关于跨账户访问AWS 的信任关系约束仍然适用要担任其他账户的角色你的账户必须被该角色信任信任关系在角色创建时定义于角色信任策略中同时用户所在账户的管理员必须为该用户附加允许调用该操作针对目标账户角色 ARN的策略。角色属性值需要符合 AWS IAM 资源命名规则其合法字符集为[\u0009\u000A\u000D\u0020-\u007E\u0085\u00A0-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]。临时安全凭证获取策略之二Session TokensGetSessionToken当cas.amazon-sts.rbac-enabled未开启默认时端点走 STS 的GetSessionTokenAPI 操作。其典型应用场景是必须通过多因素认证MFA的用户已认证用户可通过 CAS 提供的多因素认证触发器来满足并启动 MFA 流程相关触发机制参见 多因素认证触发器指南。从源码看GetSessionToken 分支 会构建GetSessionTokenRequest携带durationSeconds、serialNumber、tokenCode然后调用client.getSessionToken(...)返回凭证。仓库中的 Puppeteer 场景 aws-sts-credentials-mfa/script.js 展示了带 MFA 的完整调用先为casuser获取 Duo Security 的 bypass code随后在 POST 请求中追加passcode${bypassCode}参数提交给awsSts端点并断言返回的临时凭证包含三项关键字段。值得注意的是AWS 官方对GetSessionToken的权限说明是用户获取会话令牌不需要任何权限该 API 的用途就是通过 MFA 对用户进行身份验证策略无法控制认证类操作。权限边界与安全建议授予的权限AWS 官方对临时凭证权限的规定如下若 API 以 IAM 用户的凭据调用则临时安全凭证拥有与该 IAM 用户相同的权限同理若以 AWS 账户根用户凭据调用则临时安全凭证拥有根用户权限。因此 AWS 建议不要使用根用户凭据调用该 API而应创建具备所需最小权限的 IAM 用户再以这些 IAM 用户进行日常交互。使用限制需要注意通过GetSessionToken获得的临时凭证不能用于调用 IAM 或 AWS STS 的 API 操作但可以用于调用其他 AWS 服务的 API。基于主体属性的授权校验除 AWS 侧权限外CAS 还在应用层做了双重防线端点要求认证主体的属性满足principal-attribute-name/principal-attribute-value的约束属性缺失或值不匹配均返回401。测试类 AmazonSecurityTokenServiceEndpointTests 覆盖了以下场景属性存在但值不匹配正则groupMembershipsome-value对^un[A-Z]known.*→401属性名不存在principal-attribute-nameunknown→401未配置授权属性时合法凭据直接签发 →200错误密码 →401RBAC 模式下单一角色不可被覆盖、多角色必须显式指定、未知角色与正则角色均被拒绝 →401。将临时凭证接入 AWS CLI签发成功后为方便使用可以直接将上面生成的临时 AWS 访问凭据复制粘贴设置为环境变量或保存到~/.aws/credentials文件中AWS CLI 会根据 Profile 名称自动加载识别# 方式一写入凭据文件内容即 awsSts 端点返回的 INI 文本 cat EOF ~/.aws/credentials [default] aws_access_key_id... aws_secret_access_key... aws_session_token... EOF # 方式二导出环境变量 export AWS_ACCESS_KEY_ID... export AWS_SECRET_ACCESS_KEY... export AWS_SESSION_TOKEN...关于 AWS CLI 的凭据存储约定AWS CLI 将通过aws configure指定的敏感凭据信息保存在主目录.aws文件夹下的credentials文件中而敏感度较低的配置选项则保存在同目录下的config文件中。了解更多 AWS CLI 用法可参阅 AWS 官方 CLI 用户指南。延伸基于 AWS Verified Permissions 的服务访问策略作为cas-server-support-aws模块的延伸能力非 STS 端点本身CAS 7.0.0 起还提供了 AmazonVerifiedPermissionsRegisteredServiceAccessStrategy将 AWS Verified PermissionsAVP接入 CAS 的服务访问控制当该策略被配置到注册服务上时CAS 会把认证主体的principalId、服务 ID 及上下文属性构造成IsAuthorizedRequest含policyStoreId、actionId与基于主体/服务属性构建的ContextDefinition调用 AVP 的isAuthorized决策接口仅当决策为ALLOW时才放行服务访问。该策略同样支持通过credential-access-key/credential-secret-key/region等 SpEL 表达式配置 AWS 凭据适合需要把 CAS 授权策略迁移到云原生策略引擎的场景。小结Apereo CAS 的 AWS 集成以cas-server-support-aws模块为桥梁通过awsStsActuator 端点将 CAS 认证与 AWS STS 临时凭证签发打通既支持基于角色属性AssumeRole的 RBAC 式授权也支持面向 MFA 场景的会话令牌GetSessionToken签发并在应用层叠加主体属性校验、在输出层直接生成 AWS CLI 可识别的凭据文件格式。配合源码中的凭证链解析WebIdentity → InstanceProfile → Profile → 系统属性 → 环境变量 → 静态凭据 → 容器 → 实例配置文件与完整的端到端测试Puppeteer 与 JUnit这套方案为“CAS 认证 AWS 授权”的联合身份场景提供了开箱即用且可审计的实现路径。赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐使用 AWS SDK for Go 实现 STS AssumeRole获取临时安全凭证的完整实战指南使用 AWS SDK for Go 实现 STS AssumeRole获取临时安全凭证的完整实战指南 导读 本文以 go/sts https://link.g示例工程教程后端Gimme AWS Creds简化AWS临时凭证获取的利器Gimme AWS Creds简化AWS临时凭证获取的利器 项目介绍 在现代云环境中安全性和便捷性是开发者关注的两大核心问题。 Gimme AWS CredMinIO 与 WSO2 Identity Server 集成通过 STS Client Grants 获取临时凭证MinIO 与 WSO2 Identity Server 集成通过 STS Client Grants 获取临时凭证 本篇指南基于 MinIO 仓库中的 do后端存储对象存储分布式存储云原生上一篇5个惊人技巧用WLED将ESP32变成专业级智能灯光控制器下一篇DxWrapper兼容性问题终极解决指南从零到精通创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
