SpringSecurity中文文档(Servlet X.509 Run-As)

X.509 Authentication

X. 509证书身份验证的最常见用途是在使用 SSL 时验证服务器的身份,最常见的用法是在浏览器中使用 HTTPS。浏览器会自动检查服务器提供的证书是否已由其维护的受信任证书颁发机构列表中的一个颁发(数字签名)。

您还可以使用带有“相互身份验证”的 SSL。然后,服务器从客户机请求一个有效的证书,作为 SSL 握手的一部分。服务器通过检查客户端的证书是否由可接受的授权机构签名来对客户端进行身份验证。如果提供了有效的证书,则可以通过应用程序中的 servletAPI 获得该证书。SpringSecurityX. 509模块使用过滤器提取证书。它将证书映射到一个应用程序用户,并加载该用户的授权集,以便与标准 Spring Security 基础设施一起使用。

您还可以使用带有“相互身份验证”的 SSL。然后,服务器从客户机请求一个有效的证书,作为 SSL 握手的一部分。服务器通过检查客户端的证书是否由可接受的授权机构签名来对客户端进行身份验证。例如,如果使用 Tomcat,则应该阅读 Tomcat SSL 指令。在使用 Spring Security 进行试验之前,您应该让它工作起来。

Adding X.509 Authentication to Your Web Application

启用 X.509客户端身份验证非常简单,为此,在 http 安全名称空间配置中添加 < x509/> 元素:

<http>
...<x509 subject-principal-regex="CN=(.*?)," user-service-ref="userService"/>;
</http>

元素有两个可选属性:

  • 主题-主体-正则表达式。用于从证书的主题名称中提取用户名的正则表达式。默认值显示在前面的清单中。这是传递给 UserDetailsService 以加载用户权限的用户名。
  • 用户-服务-参考。这是与 X.509一起使用的 UserDetailsService 的 bean ID。如果在应用程序上下文中只定义了一个,则不需要这样做。

Subject-main-regex 应该包含一个单独的组。例如,默认表达式(CN = (。?))匹配公共名称字段。因此,如果证书中的主题名称是“ CN = Jimi Hendrix,OU = …”,则给出一个用户名“ Jimi Hendrix”。匹配不区分大小写。因此,「电邮地址 = (。?)匹配“ EMAILADDRESS = jimi@hendrix.org,CN = …”,给出一个用户名“ jimi@hendrix.org”。如果客户端提供了一个证书,并且成功地提取了一个有效的用户名,那么在安全上下文中应该有一个有效的 Authentication 对象。如果找不到证书或找不到对应的用户,则安全上下文保持为空。这意味着您可以将 X.509身份验证与其他选项一起使用,例如基于表单的登录。

Setting up SSL in Tomcat

SpringSecuritySamples 存储库中有一些预生成的证书。如果不想生成自己的,可以使用它们来启用 SSL 进行测试。Jks 文件包含服务器证书、私钥和颁发机构证书。还有一些来自示例应用程序的用户的客户端证书文件。您可以在浏览器中安装它们,以启用 SSL 客户端身份验证。

要使用 SSL 支持运行 tomcat,请将 server.jks 文件放入 tomcat conf 目录,并将以下连接器添加到 server.xml 文件:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true"clientAuth="true" sslProtocol="TLS"keystoreFile="${catalina.home}/conf/server.jks"keystoreType="JKS" keystorePass="password"truststoreFile="${catalina.home}/conf/server.jks"truststoreType="JKS" truststorePass="password"
/>

如果仍然希望 SSL 连接成功,即使客户端不提供证书,也可以将 clientAuth 设置为 want。不提供证书的客户端无法访问 Spring Security 保护的任何对象,除非使用非 X.509身份验证机制,如表单身份验证。

Run-As Authentication Replacement

AbstractSecurityInterceptor 能够在安全对象回调阶段临时替换 SecurityContext 和 SecurityContextHolder 中的 Authentication 对象。只有在 AuthenticationManager 和 AccessDecisionManager 成功处理原始 Authentication 对象时才会发生这种情况。RunAsManager 指示应该在 SecurityInterceptorCallback 期间使用的替换 Authentication 对象(如果有的话)。

通过在安全对象回调阶段临时替换 Authentication 对象,安全调用可以调用需要不同身份验证和授权凭据的其他对象。它还可以对特定的 GrantedAuthority 对象执行任何内部安全检查。因为 Spring Security 提供了许多帮助器类,可以根据 SecurityContextHolder 的内容自动配置远程协议,所以这些 run-as 替换在调用远程 Web 服务时特别有用。

Configuration

Spring Security 提供了一个 RunAsManager 接口:

Authentication buildRunAs(Authentication authentication, Object object,List<ConfigAttribute> config);boolean supports(ConfigAttribute attribute);boolean supports(Class clazz);

第一个方法返回 Authentication 对象,该对象应在方法调用期间替换现有 Authentication 对象。如果该方法返回 null,则表示不应进行替换。第二个方法由 AbstractSecurityInterceptor 用作其配置属性启动验证的一部分。支持(Class)方法由安全拦截器实现调用,以确保配置的 RunAsManager 支持安全拦截器提供的安全对象类型。

SpringSecurity 提供了 RunAsManager 的一个具体实现。如果有任何 ConfigAttribute 以 RUN _ AS _ 开头,RunAsManagerImpl 类将返回替换的 RunAsUserToken。如果找到任何这样的 ConfigAttribute,替换的 RunAsUserToken 包含与原始 Authentication 对象相同的主体、凭据和授予的权限,以及针对每个 RUN _ AS _ ConfigAttribute 的一个新的 SimpleGrantedAuthority。每个新的 SimpleGrantedAuthority 都以 ROLE _ 作为前缀,后跟 RUN _ AS ConfigAttribute。例如,RUN _ AS _ SERVER 会导致替换 RunAsUserToken,其中包含 ROLE _ RUN _ AS _ SERVER 授予的权限。

替换 RunAsUserToken 与任何其他 Authentication 对象一样。它需要通过 AuthenticationManager 进行身份验证,可能是通过委托给合适的 AuthenticationProvider。RunAsImpAuthenticationProvider 执行此类身份验证。它接受所提供的任何 RunAsUserToken 为有效。

为了确保恶意代码不会创建 RunAsUserToken 并将其呈现给 RunAsImpenticationProvider 以保证其被接受,密钥的散列将存储在所有生成的令牌中。RunAsManagerImpl 和 RunAsImpenticationProvider 是在 bean 上下文中用相同的键创建的:

<bean id="runAsManager"class="org.springframework.security.access.intercept.RunAsManagerImpl">
<property name="key" value="my_run_as_password"/>
</bean><bean id="runAsAuthenticationProvider"class="org.springframework.security.access.intercept.RunAsImplAuthenticationProvider">
<property name="key" value="my_run_as_password"/>
</bean>

通过使用相同的键,可以验证每个 RunAsUserToken,因为它是由经过批准的 RunAsManagerImpl 创建的。由于安全原因,RunAsUserToken 在创建后是不可变的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java与Selenium配置及常见报错解决方法

Java与Selenium配置及常见报错解决方法 1. 简介 Java与Selenium是自动化测试中常用的工具和技术。正确配置开发环境并处理可能出现的问题&#xff0c;对于顺利开展测试工作至关重要。本文将为您详细介绍Java与Selenium的配置过程&#xff0c;并提供常见报错的解决方法。 2. …

中英双语介绍英国伟大的作家:查尔斯·狄更斯(Charles Dickens)

中文版 查尔斯狄更斯简介 查尔斯狄更斯&#xff08;Charles Dickens&#xff0c;1812年2月7日&#xff0d;1870年6月9日&#xff09;是19世纪英国最著名的小说家之一&#xff0c;以其丰富的文学作品和独特的写作风格闻名于世。他的作品不仅在文学界具有重要地位&#xff0c;而…

SpringSecurity中@PreAuthorize(“hasRole(‘ROLE_USER‘)“) 不起作用的原因

PreAuthorize(“hasRole(‘ROLE_USER’)”) 不起作用的原因可能确实是用户信息中没有包含正确的角色信息&#xff0c;但也可能由其他几个因素导致。以下是一些可能的原因&#xff1a; 1、用户信息中确实没有角色信息&#xff1a; 如果 Authentication 对象中的 GrantedAuthor…

一气之下,关闭成都400多人的游戏公司

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 最近&#xff0c;多益网络宣布关闭成都公司&#xff0c;在未来三年内&#xff0c;关闭成都所有的相关公司。原因竟然是输掉了劳动仲裁&#xff0c;赔偿员工38万多&#xff0c;然后一气之下要退出成都&#xff0c;…

【Python】简易书籍管理程序

之前简单介绍了有关Python的面向对象中的类&#xff0c;这次就围绕"类"和json格式来做一个简单的代码程序&#xff0c;并且在后面还附带了数据。 import json import re import timeclass BookManager:def __init__(self):self.books {} # 使用字典存储书籍信息&a…

Python基础之协程

文章目录 1 协程1.1 简介1.2 协程优势&分类1.2.1 优势1.2.2 分类 1.3 generator协程1.4 gevent协程1.5 asyncio1.5.1 简介1.5.2 asyncio函数1.5.3 async\await1.5.4 asyncio基本操作1.5.4.1 asyncio协程对象1.5.4.2 task对象1.5.4.3 future对象1.5.4.4 绑定回调1.5.4.5 异步…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日聚会(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

使用antd的<Form/>组件获取富文本编辑器输入的数据

前端开发中&#xff0c;嵌入富文本编辑器时&#xff0c;可以通过富文本编辑器自身的事件处理函数将数据传输给后端。有时候&#xff0c;场景稍微复杂点&#xff0c;比如一个输入页面除了要保存富文本编辑器的内容到后端&#xff0c;可能还有一些其他输入组件获取到的数据也一并…

Mac搭建anaconda环境并安装深度学习库

1. 下载anaconda安装包 根据自己的操作系统不同&#xff0c;选择不同的安装包Anaconda3-2024.06-1-MacOSX-x86_64.pkg&#xff0c;我用的还是旧的intel所以下载这个&#xff0c;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/&#xff0c;如果mac用的是M1&#xff0…

GuLi商城-商品服务-API-品牌管理-云存储开通与使用

这里学习下阿里云对象存储 地址&#xff1a;对象存储 OSS_云存储服务_企业数据管理_存储-阿里云 登录支付宝账号&#xff0c;找到了我以前开通的阿里云对象存储 熟悉下API 文档中心 简介_对象存储(OSS)-阿里云帮助中心 我们将用这种方式上传阿里云OSS

SprongBoot3整合Knife4j实现在线接口文档

大家好&#xff0c;我是晓凡。 写在前面 在上一篇文章&#xff0c;我们详细介绍了SpringBoot3 怎么整合SpringDoc实现在线接口文档。但是&#xff0c;有不少小伙伴 都觉得接口界面太丑了。有没有什么更美观一点的UI界面呢&#xff1f; 当然是有的了&#xff0c;毕竟这是一个…

那些年,学过的屠龙术

朱泙漫学屠龙于支离益&#xff0c;单千金之家&#xff0c;三年技成而无所用其巧。 程序员的技能&#xff0c;比如&#xff1a; Windows平台编程&#xff0c;从入行业时至今&#xff0c;没有做过相关的业务&#xff0c;相关的知识只能当成谈资。 Windows平台下应用的crash问题&…

基于Android Studio电影购票系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 主要实为了方便用户随时随地进行电影购票。在配色方面选择了一些富有电影元素的颜色。主要能够实现的功能与流程为&#xff1a; 1.用户首先需要注册用户名填写密码。 2.用户可以用之前注册的用户名和密码进行登录。 3.登…

数据库——数据库性能优化

title: 数据库——数据库性能优化 date: 2024-07-06 12:26:21 tags: 数据库 categories: 数据库 cover: /image/T1.jpg description: 数据库——MySQL的性能优化 数据库优化 系统的吞吐量瓶颈往往出现在数据库的 访问速度 上&#xff0c;随着应用程序的运行&#xff0c;数据库…

【密码学】密码学体系

密码学体系是信息安全领域的基石&#xff0c;它主要分为两大类&#xff1a;对称密码体制和非对称密码体制。 一、对称密码体制&#xff08;Symmetric Cryptography&#xff09; 在对称密码体制中&#xff0c;加密和解密使用相同的密钥。这意味着发送方和接收方都必须事先拥有这…

kubeadm离线部署kubernetesv1.30.0

背景&#xff1a;最近由于docker image获取镜像受限的问题&#xff0c;以及公司内部部署kubernetes受限于内部网络无法访问公网的问题&#xff0c;对于离线部署kubernetes成为不是十分方便。谨以此文仅供参考。 kubernetes部署节点信息 kubernetes版本 1.30.0 操作系统版本&a…

springboot2.7.6 集成swagger

在 Spring Boot 2.7.6 版本中集成 Swagger 的步骤相对直接&#xff0c;主要涉及添加依赖、编写配置以及在控制器中添加文档注解几个环节。 下面是集成 Swagger 的基本步骤&#xff1a; 1. 添加依赖 首先&#xff0c;在pom.xml文件中添加 Swagger 相关依赖。 对于 Spring Boot…

1-3 NLP为什么这么难做

1-3 NLP为什么这么难做 主目录点这里 字词结构的复杂性 中文以汉字为基础单位&#xff0c;一个词通常由一个或多个汉字组成&#xff0c;而不像英语词汇单元由字母构成。这使得中文分词&#xff08;切分句子为词语&#xff09;成为一个具有挑战性的任务。语言歧义性 中文中常…

提升机硬件设备的技术规格文档

提升机硬件设备技术规格文档 1. 产品概述 本技术规格文档旨在详细描述[公司名称]生产的[型号]型提升机的硬件设备技术参数、性能指标、安全特性及安装维护要求。该提升机设计用于[具体应用场景&#xff0c;如高层建筑、仓库货物搬运、家用等]&#xff0c;旨在提供高效、安全、…

网络安全设备——蜜罐

网络安全设备蜜罐&#xff08;Honeypot&#xff09;是一种主动防御技术&#xff0c;它通过模拟真实网络环境中的易受攻击的目标&#xff0c;以吸引和监测攻击者的活动。具体来说&#xff0c;蜜罐是一种虚拟或实体的计算机系统&#xff0c;它模拟了一个真实的网络系统或应用程序…