Authing 文档文档
快速开始
概念
使用指南
开发集成 arrow
  • V2 文档
  • V3 文档
元数据
应用集成
身份自动化
加入 APN
开发集成
多租户(内测版)
控制台文档
多租户控制台
租户控制台
Saas 应用 Demo
快速开始
概念
使用指南
开发集成 arrow
  • V2 文档
  • V3 文档
元数据
应用集成
身份自动化
加入 APN
开发集成
多租户(内测版)
控制台文档
多租户控制台
租户控制台
Saas 应用 Demo
旧版
  • 单页 Web 应用

  • 移动、客户端应用

  • 标准 Web 应用

  • 框架集成

    • Spring CAS
    • Spring OAuth
    • Spring OIDC
    • Express OIDC
    • Express Passport
  • 其他

  1. 开发集成
  2. /
  3. 框架集成
  4. /
  5. Spring OAuth

¶ Spring Security 集成 Authing OAuth 2.0 快速开始

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

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

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

  • 认证
  • 授权
  • 攻击防护

¶ 集成介绍

  OAuth 2.0 协议定义了如何能让第三方应用以有限的权限访问 HTTP 服务相关规范,可以通过构建资源拥有者与 HTTP 服务间的许可交互机制,让第三方应用代表资源拥有者访问服务,或者通过授予权限给第三方应用,让其代表自己访问服务。
  Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于 Spring 的应用程序的实际标准。它致力于为 Java 应用程序提供身份验证和授权。与所有 Spring 项目一样,Spring Security 的真正强大之处在于可以轻松扩展以满足自定义要求。

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

  • 开发工具:IDEA
  • 项目管理工具:Maven
  • JDK 版本:1.8

¶ 配置 Authing

¶ 获取 Authing 平台信息

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

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

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

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

Spring Security OAuth 默认的回调地址为 /login/oauth2/code/{clientId}

默认回调地址

确认开启 OAuth 2.0 服务并进行配置 开启OAuth

¶ 项目搭建

¶ 添加依赖

添加 Spring Web,Spring Security,Spring Oauth2 Client 依赖 创建项目2

<dependencies>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-oauth2-client</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-security</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
    <dependency>
        <groupId>cn.authing</groupId>
        <artifactId>java-core</artifactId>
        <version>{LATEST_VERSION}</version>
    </dependency>
</dependencies>

¶ 授权码模式

¶ 授权码模式工作流程

  1. 用户访问客户端,客户端通过重定向引导用户至授权服务器
  2. 授权服务器对资源所有者进行身份验证,认证成功后重定向至客户端并返回授权码
  3. 客户端通过授权码与授权服务器交换访问访问令牌
  4. 客户端使用访问令牌访问资源服务器
  5. 资源服务器验证访问令牌,并返回受保护数据

    执行流程图如下 执行流程图

¶ 修改项目配置文件

找到 src/main/resources/application.properties,填入项目信息:

server.port=8081
spring.security.oauth2.client.registration.authing.client-id={替换为你的App ID如:App Secret5e72d72e3798fb03e1d57b13}
spring.security.oauth2.client.registration.authing.client-name=authing
spring.security.oauth2.client.registration.authing.client-secret={替换为你的App Secret如:931f19ce2161e5560c072f586c706ee6}
spring.security.oauth2.client.registration.authing.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.authing.client-authentication-method=POST
spring.security.oauth2.client.registration.authing.redirect-uri=http://localhost:${server.port}/login/oauth2/code/authing

spring.security.oauth2.client.registration.authing.scope=profile
spring.security.oauth2.client.provider.authing.user-info-authentication-method=form
spring.security.oauth2.client.provider.authing.authorization-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/auth
spring.security.oauth2.client.provider.authing.user-name-attribute=username
spring.security.oauth2.client.provider.authing.token-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/token
spring.security.oauth2.client.provider.authing.user-info-uri=https://core.authing.cn/oauth/me

需要将这里的 {clientId}、{secret}、{authorization-uri} 替换成上一步 应用配置 中的实际信息

¶ 密码模式

¶ 修改项目配置文件

找到 src/main/resources/application.properties,填入项目信息:

server.port=8081
spring.security.oauth2.client.registration.authing.client-id={替换为你的App ID如:App Secret5e72d72e3798fb03e1d57b13}
spring.security.oauth2.client.registration.authing.client-name=authing
spring.security.oauth2.client.registration.authing.client-secret={替换为你的App Secret如:931f19ce2161e5560c072f586c706ee6}
spring.security.oauth2.client.registration.authing.authorization-grant-type=password
spring.security.oauth2.client.registration.authing.client-authentication-method=POST
spring.security.oauth2.client.registration.authing.scope=profile
spring.security.oauth2.client.provider.authing.token-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/token

需要将这里的 {clientId}、{secret}、{token-uri} 替换成上一步 应用配置 中的实际信息

¶ 业务端处理

密码模式

密码模式是通过用户名密码直接换取令牌

认证地址 https://{域名}.authing.cn/oauth/token?username={用户名}&password={密码}&grant_type=password&scope={Scope}&client_id={客户端 ID}&client_secret={客户端秘钥}

¶ 客户端模式

¶ 修改项目配置文件

找到 src/main/resources/application.properties,填入项目信息:

server.port=8081
spring.security.oauth2.client.registration.authing.client-id={替换为你的App ID如:App Secret5e72d72e3798fb03e1d57b13}
spring.security.oauth2.client.registration.authing.client-name=authing
spring.security.oauth2.client.registration.authing.client-secret={替换为你的App Secret如:931f19ce2161e5560c072f586c706ee6}
spring.security.oauth2.client.registration.authing.authorization-grant-type=client_credentials
spring.security.oauth2.client.registration.authing.client-authentication-method=POST
spring.security.oauth2.client.registration.authing.scope=profile
spring.security.oauth2.client.provider.authing.token-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/token

需要将这里的 {clientId}、{secret}、{token-uri} 替换成上一步 应用配置 中的实际信息

¶ 业务端处理

密码模式

客户端模式与密码模式雷同,通过应用 ID 和应用秘钥换取令牌

认证地址 https://{域名}.authing.cn/oauth/token?grant_type=client_credentials&scope={Scope}&client_id={客户端 ID}&client_secret={客户端秘钥}

¶ 简化模式

¶ 修改项目配置文件

找到 src/main/resources/application.properties,填入项目信息:

server.port=8080
spring.security.oauth2.client.registration.authing.client-id={替换为你的App ID如:App Secret5e72d72e3798fb03e1d57b13}
spring.security.oauth2.client.registration.authing.client-name=authing
spring.security.oauth2.client.registration.authing.client-secret={替换为你的App Secret如:931f19ce2161e5560c072f586c706ee6}
spring.security.oauth2.client.registration.authing.authorization-grant-type=implicit
spring.security.oauth2.client.registration.authing.client-authentication-method=POST
spring.security.oauth2.client.registration.authing.redirect-uri=http://localhost:${server.port}/callback
spring.security.oauth2.client.registration.authing.scope=profile
spring.security.oauth2.client.provider.authing.token-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/token

需要将这里的 {clientId}、{secret}、{token-uri}、{redirect-uri} 替换成上一步 应用配置 中的实际信息

简化模式

简化模式下,用户通过浏览器直接发起令牌交换操作,无需后台参与

认证地址 https://{域名}.authing.cn/oauth/authorize?response_type=token&client_id={客户端 ID}&redirect_uri={回调地址}&scope={SCOPE}&state={state}

简化模式访问

认证授权之后,浏览器重定向到回调地址并携带访问令牌 简化模式成功

¶ 单点登录

¶ 分别创建项目 server-file,server-pic

项目列表

¶ 修改项目配置文件

server-file

server.port=8081
spring.security.oauth2.client.registration.authing.client-id={替换为你的App ID如:App Secret5e72d72e3798fb03e1d57b13}
spring.security.oauth2.client.registration.authing.client-name=authing
spring.security.oauth2.client.registration.authing.client-secret={替换为你的App Secret如:931f19ce2161e5560c072f586c706ee6}
spring.security.oauth2.client.registration.authing.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.authing.client-authentication-method=POST
spring.security.oauth2.client.registration.authing.redirect-uri=http://localhost:${server.port}/login/oauth2/code/authing

spring.security.oauth2.client.registration.authing.scope=profile
spring.security.oauth2.client.provider.authing.user-info-authentication-method=form
spring.security.oauth2.client.provider.authing.authorization-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/auth
spring.security.oauth2.client.provider.authing.user-name-attribute=username
spring.security.oauth2.client.provider.authing.token-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/token
spring.security.oauth2.client.provider.authing.user-info-uri=https://core.authing.cn/oauth/me

server-pic

server.port=8082
spring.security.oauth2.client.registration.authing.client-id={替换为你的App ID如:App Secret5e72d72e3798fb03e1d57b13}
spring.security.oauth2.client.registration.authing.client-name=authing
spring.security.oauth2.client.registration.authing.client-secret={替换为你的App Secret如:931f19ce2161e5560c072f586c706ee6}
spring.security.oauth2.client.registration.authing.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.authing.client-authentication-method=POST
spring.security.oauth2.client.registration.authing.redirect-uri=http://localhost:${server.port}/login/oauth2/code/authing

spring.security.oauth2.client.registration.authing.scope=profile
spring.security.oauth2.client.provider.authing.user-info-authentication-method=form
spring.security.oauth2.client.provider.authing.authorization-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/auth
spring.security.oauth2.client.provider.authing.user-name-attribute=username
spring.security.oauth2.client.provider.authing.token-uri=https://{替换为你的Issuer,如:authing-net-sdk-demo}.authing.cn/oauth/token
spring.security.oauth2.client.provider.authing.user-info-uri=https://core.authing.cn/oauth/me

¶ 在 Authing 控制台增加回调地址

sso 回调地址

¶ 设置项目 server-file 受保护资源

项目a资源

¶ 设置项目 server-pic 受保护资源

项目b资源

¶ 验证单点登录效果

¶ 分别启动项目 server-file,server-pic

启动项目a 启动项目b

¶ 访问受保护资源

此时无论访问 server-file 还是 server-pic 都会被重定向到 Authing 认证页面

重定向登录

¶ 登录后访问受保护资源

完成登录后,直接访问 server-pic 的资源也不需要重新进行认证

登录成功

¶ 基于 Spring Security 进行扩展

¶ 对 Spring Security 进行配置

自定义spring

¶ 增加项目回调地址

自定义回调地址

¶ 引入 Authing SDK 进行自定义扩展

 <dependency>
    <groupId>cn.authing</groupId>
    <artifactId>java-core</artifactId>
    <version>{LATEST_VERSION}</version>
</dependency>
自定义扩展点

¶ 接下来你可能需要

使用 Spring Security 集成 OIDC

Spring Security 集成 Authing OIDC 快速开始

Express 学习

Express 集成 OIDC 单点登录指南

使用 Spring Security 集成 CAS

Spring Security 集成 Authing CAS 快速开始
本页资源 下载一个 Spring Security 集成 Authing OAuth 2.0 快速开始的示例程序或在 GitHub 查看。
下载 在 GitHub 查看
上一篇: Spring CAS 下一篇: Spring OIDC
  • 集成介绍
  • 配置 Authing
  • 项目搭建
  • 单点登录
  • 基于 Spring Security 进行扩展
  • 接下来你可能需要

用户身份管理

集成第三方登录
手机号闪验 (opens new window)
通用登录表单组件
自定义认证流程

企业内部管理

单点登录
多因素认证
权限管理

开发者

开发文档
框架集成
博客 (opens new window)
GitHub (opens new window)
社区用户中心 (opens new window)

公司

400 888 2106
sales@authing.cn
北京市朝阳区北辰世纪中心 B 座 16 层(总)
成都市高新区天府五街 200 号 1 号楼 B 区 4 楼 406 室(分)

京ICP备19051205号

beian京公网安备 11010802035968号

© 北京蒸汽记忆科技有限公司