Spring-Authorization-Server

使用 Spring Authorization Server 和 PKCE 对 SPA 应用进行身份认证

1、简介 本文将带你了解如何在 OAuth 2.0 公开客户端(Public Client)中使用 Proof Key for Code Exchange (代码交换证明密钥,PKCE)。 2、背景 OAuth 2.0 公开客户端(如 SPA 单页应用,或使用授权码授权的移动应用)很容易受到授权码拦截攻击。如果客户端与服务器之间的通信是通过不安全的网络进行的,恶意攻击者就可能从授权端点截获授权代码。 如果攻击者可以访问授权码,就可以利用它获 Access Token。一旦攻击者拥有了 Access Token,就可以像合法应用用户一样访问受保护的应用资源,从而严重损害应用。例如,如果 Access Token 与金融应用相关联,攻击者就可能获取敏感的应用信息。 2.1、OAuth 授权码拦截攻击 来看看 Oauth 授权码拦截攻击是如何发生的: 上图展示了恶意攻击者如何滥用授权码获取 Access Token 的流程: 合法的 OAuth 应用使用其 Web 浏览器启动 OAuth 授权请求流程,并提供所有必要的详细信息。 Web 浏览器向授权服务器发送请求。 授权服务器向 Web 浏览器返回授权码。 在此阶段,如果通信是通过不安全的通道进行的,恶意用户可能会获取授权码。 恶意用户使用授权码从授权服务器获取 Access Token。 由于授权许可有效,授权服务器会向恶意应用签发 Access Token。恶意应用可以滥用 Access Token,代表合法应用访问受保护的资源。 代码交换证明密钥(Proof Key for Code Exchange,PKCE)是 OAuth 框架的一个扩展,旨在减轻这种攻击。 3、PKCE 和 OAuth PKCE(Proof Key for Code Exchange)扩展在 OAuth 授权码授权流程中包括以下额外步骤:

在 Spring Authorization Server 中将 Authorities 作为自定义 Claim 添加到 JWT Access Token 中。

1、概览 在许多情况下,可以在 JWT Access Token 添加自定义 Claim,从而在 Token Payload 中包含更多信息。 本文将带你了解如何在 Spring Authorization Server 中为 JWT Access Token 添加资源所有者授权。 2、Spring Authorization Server Spring Authorization Server 是 Spring 生态系统中的一个新项目,旨在为 Spring 应用提供授权服务器支持。它通过 Spring 编程模型简化 OAuth 2.0 和 OpenID Connect(OIDC) 授权服务器的实现。 2.1、Maven 依赖 首先,在 pom.xml 中导入 spring-boot-starter-web、spring-boot-starter-security、spring-boot-starter-test 和 spring-security-oauth2-authorization-server 依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-authorization-server</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.5.4</version> </dependency> 或者,可以在 pom.xml 文件中添加 spring-boot-starter-oauth2-authorization-server 依赖:

Spring Security Oauth 授权服务器

1、简介 OAuth 是一种描述授权过程的开放标准。它可用于授权用户访问 API。例如,REST API 可以限制只有具有适当角色的注册用户才能访问。 OAuth 授权服务器负责认证用户身份,并签发包含用户数据和适当访问策略的访问令牌(Access Token)。 本将带你了解如何使用 Spring Security OAuth 授权服务器 实现一个简单的 OAuth 应用。 我们要创建一个 CS 应用,通过 REST API 获取资源服务器上的文章列表。客户端服务和服务器服务都需要 OAuth 身份认证。 2、授权服务器实现 先来看看 OAuth 授权服务器的配置。它作为文章资源和客户端服务器的身份认证源。 2.1、依赖 首先,在 pom.xml 中添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-authorization-server</artifactId> <version>0.2.0</version> </dependency> 2.2、配置 在 application.yml 文件中,设置 server.port 属性来配置认证服务器的运行端口: server: port: 9000 然后,就可以开始配置 Spring Bean 了。首先,需要一个 @Configuration 类,在该类中创建一些 OAuth 特有的 Bean。 第一个是客户端服务的 Repository。在本例中,使用 RegisteredClient Builder 类创建一个客户端: