当前位置:网站首页 > 技术博客 > 正文

spring security oauth2 jwt 登出



Spring Security 5 开始,引入了一个新的 类,可以用它来配置外部授权服务器(Authorization Server)。

本文主要带你了解 方法的一些可用配置选项。

在 Spring Boot 项目中,只需添加 spring-boot-starter-oauth2-client Starter 即可:

在非 Spring Boot 项目中,除了标准的 Spring 和 Spring Security 依赖外,还需要显式添加 spring-security-oauth2-clientspring-security-oauth2-jose 依赖:

在 Spring Boot 项目中,只需为每个要配置的客户端添加几个标准属性即可。

接下来,我们要配置使用 GoogleFacebook 作为 Authentication Provider 注册的客户端登录。

要获取 Google OAuth2 身份认证的客户端凭证,请访问 Google API 控制台 的 “Credentials” 部分。

在此,为 Web 应用创建 “OAuth2 Client ID” 类型的凭证。这样,Google 就会为我们设置一个 “client id” 和 “secret”。

还必须在 Google 控制台中配置 Authorized Redirect URI(授权重定向 URI),这是用户成功登录 Google 后重定向到的路径。

默认情况下,Spring Boot 会将重定向 URI 配置为 。

因此,为 Google 添加这个 URI:

要获取用于 Facebook 身份认证的客户端凭证,需要在 Facebook for Developers 网站上注册一个应用,并将相应的 URI 设置为 “Valid OAuth redirect URI”:

接下来,需要在 文件中添加客户端凭证。

Spring Security 属性的前缀是 ,然后是客户端名称和客户端属性名称:

为至少一个客户端添加这些属性将启用 类,该类会设置所有必要的 Bean。

自动 Web 安全配置相当于定义一个简单的 元素:

在这里,可以看到 元素的使用方式与已知的 和 元素类似。

现在,当我们尝试访问受保护的 URL 时,应用会显示一个自动生成的登录页面,其中有两个客户端:

oauth 登录

注意,除了 GoogleFacebook 之外,Spring Security 项目还包含 GitHubOkta 的默认配置。这些默认配置提供了所有必要的身份认证信息,因此我们只需输入客户端凭证即可。

如果想使用 Spring Security 中未配置的其他 Authentication Provider,就需要定义完整的配置,包括 Authorization URI 和 Token URI 等信息。下面 来看看 Spring Security 的默认配置,以了解所需的属性。

如果使用的不是 Spring Boot 应用,则需要定义一个 Bean,其中包含授权服务器所拥有的客户端信息的内部表示:

如上,创建了一个 ,其中包含一个 对象列表。

构建这些对象的 方法如下:

如上,从类似的 文件中读取客户端凭证。然后,使用 Spring Security 中已定义的 枚举来为 Google 和 Facebook 客户端提供其余的客户端属性。

每个 实例对应一个客户端。

最后,必须基于 Bean 创建一个 Bean,并使用 元素对两者进行注册:

如上,可以使用 的 方法来注册自定义 。

还必须定义一个自定义登录页面,因为它不会再自动生成。

OAuth 2 会用到几个元素,可以使用 方法对其进行自定义。

注意,所有这些元素在 Spring Boot 中都有默认配置,不需要显式配置。

接下来,看看如何在配置中自定义这些功能。

尽管 Spring Boot 会自动生成一个默认登录页面,但我们通常还是希望定义自己的自定义页面。

首先,使用 方法为 元素配置一个新的 Login URL:

如上,将登录 URL 设置为 。

接下来,定义一个 ,其中包含一个映射到该 URL 的方法:

该方法需要向视图发送一个包含可用客户端及其授权端点的 Map,可以从 Bean 中获取该 Map。

最后,需要定义 页面:

这是一个简单的 HTML 页面,显示与每个客户端进行身份认证的链接。

添加一些样式后,就可以改变登录页面的外观了:

Oauth2 登录页

可以用不同的方法控制身份认证后的行为:

  • 和 将用户重定向到给定的 URL
  • 和 以在身份认证过程后运行自定义逻辑

来看看如何设置自定义 URL,将用户重定向至指定 URL:

如果用户在认证前访问了受保护的页面,则登录后会重定向到该页面。否则,用户将被重定向到 。

如果希望将用户始终重定向到 URL,而不管他们之前是否访问了受保护的页面,可以使用 方法。

要使用自定义 Handler,必须创建一个实现 或 接口的类,覆写继承的方法,然后使用 和 方法设置 Bean。

授权端点是 Spring Security 用来向外部服务器触发授权请求的端点。

首先,为授权端点设置新属性:

如上,将 修改为 ,而不是默认的 。

还明确设置了一个必须定义的 Bean:

该 Bean 使用了 Spring 提供的实现,但也可以提供自定义的实现。

Token 端点处理 Access Token。

使用默认的响应客户端实现来显式配置 :

下面是响应客户端的 Bean:

这个配置与默认配置相同,它使用了基于与 Provider 交换授权代码(Authorization Code)的 Spring 实现。

当然,也可以用自定义响应客户端来代替。

这是与外部 Provider 进行身份认证后重定向到的端点。

来看看如何更改重定向端点的 baseUri:

默认 URI 为 。

注意,如果更改了它,还必须更新每个 的 属性,并将新 URI 添加为每个客户端的授权重定向 URI。

用户信息端点是用来获取用户信息的位置。

使用 方法自定义该端点。为此,可以使用 和 等方法来修改检索用户信息的方式。

我们可能要完成的一项常见任务是查找登录用户的相关信息。为此,可以向用户信息端点发出请求。

首先,必须获取与当前用户 Token 对应的客户端。

接下来,向客户端的用户信息端点发起请求,并检索 Map:

通过将 属性添加为 Model 属性,可以在 视图中将其显示为给用户的欢迎信息:

欢迎页

除 外, Map 还包含 、、 和 等属性。

本文介绍了如何使用 Spring Security 来配置 Oauth2 登录。


Ref:

版权声明


相关文章:

  • 深度优先遍历需要借助什么数据结构2024-11-03 18:30:03
  • 不会c语言能学数据结构吗2024-11-03 18:30:03
  • jdk8 hashmap的改进2024-11-03 18:30:03
  • uint8_t char2024-11-03 18:30:03
  • ir2104驱动电路原理2024-11-03 18:30:03
  • oracle 视图 rowid2024-11-03 18:30:03
  • 串口调试助手教程2024-11-03 18:30:03
  • c++文本文件输入输出2024-11-03 18:30:03
  • 光线和三角形求交2024-11-03 18:30:03
  • datediff(mysql中datediff函数用法)2024-11-03 18:30:03