# Spring Security 5 集成 Authing OIDC 单点登录指南

本文以 Spring 生态中用于提供认证及访问权限控制的 Spring Security 5 为例,详细介绍 Spring Security 5 如何接入 Authing OIDC。

Spring Security 是一个提供安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了 Spring IoC,DI(控制反转 Inversion of Control, DI:Dependency Injection 依赖注入)和 AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,增强了企业系统的安全性,也减轻了编写大量重复代码的负担。

Spring Security 的主要功能主要包括:

  • 认证
  • 授权
  • 攻击防护

以 Authing 提供的 OIDC 服务为例,下面将详细介绍使用 Spring Security 5 集成 Authing OIDC 单点登录的方法:

# 1. 初始化 Spring boot 项目

打开 IDEA,点击 New Project 创建一个新项目,选择 Spring Initializr 创建一个 Spring Boot 项目。

输入项目的 Group 以及 Artifact 信息。

添加 Spring Web, Spring Security 依赖。

创建好项目后,在 IDEA 中运行项目。

在项目运行后,使用浏览器访问 localhost:8080 (opens new window) 会自动跳转到 /login,可以看到页面上出现了一个基础的登录表单,说明项目初始化成功。

# 2. 配置 Authing

首先要在 Authing 注册一个账号,然后进入控制台,按照引导步骤新建一个用户池。

点击左侧的「应用」 菜单项,在右侧会看到一个默认创建好的应用。

点击「配置」,看到 App ID、App Secret 和 Issuer url,请妥善保存,之后会用到这些信息。

然后需要在回调地址处添加 http://localhost:8080/login/oauth2/code/authing (opens new window) 之后的选项与下图中保持一致。

# 3. 配置 Spring Security

回到项目中,找到 src/main/resources/application.properties,将其重命名为 application.yml,并添加如下内容:

spring:
  security:
    oauth2:
      client:
        registration:
          authing:
            client-id: {替换为您的App ID如:App Secret5e72d72e3798fb03e1d57b13}
            client-secret: {替换为您的App Secret如:931f19ce2161e5560c072f586c706ee6}
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
            client-authentication-method: post
            scope:
              - openid
              - profile
        provider:
          authing:
            issuer-uri: https://{替换为您的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/oidc
            user-name-attribute: preferred_username

需要将这里的 {clientId}、{secret}、{issuerUrl} 替换成上一步 应用配置 中的实际信息。 接下来需要在 pom.xml 中添加一些依赖并更新:

<dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-oauth2-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-oauth2-jose</artifactId>
</dependency>

一切准备就绪了,现在启动项目并访问 localhost:8080 (opens new window),即可看到 Authing 登录窗口。

Spring Security 默认会保护首页,在访问首页时会进行认证,未认证的访问请求会跳转到 /login。 注册并登录后,会跳转回首页,此时可以看到页面上的欢迎语显示了当前登录用户的用户名。

想要了解更全面的示例项目,请点击 https://github.com/Authing/authing-spring-oidc-demo (opens new window) 获取更多资讯,请访问 Authing (opens new window)官网