(一)学习spring-cloud2021之spring-authorization-server

1. 前言

1.1为什么使用spring-authorization-server?

真实原因:原先是因为个人原因,需要研究新版鉴权服务,看到了spring-authorization-server,使用过程中,想着能不能整合新版本cloud,因此此处先以springboot搭建spring-authorization-server,后续再替换为springcloud2021。

官方原因:原先使用Spring Security OAuth,而该项目已经逐渐被淘汰,虽然网上还是有不少该方案,但秉着技术要随时代更新,从而使用spring-authorization-server

2.项目迭代历程

  1. 以springboot搭建spring-authorization-server(即认证与资源服务器)

  2. 升级为springcloud2021.0.x框架,引入nacos作为注册中心

  3. 引入sentinel,进行限流降级熔断配置

  4. 引入nacos配置中心

  5. 升级sentinel,配合nacos,使项目能动态配置落地所有Feign的降级配置

  6. 引入gateway网关,swagger文档工具

  7. 待续

3.项目构建

3.1 以springboot搭建spring-authorization-server(即认证与资源服务器)

数据库相关表结构构建

需要创建3张表,sql分别如下

CREATE TABLE `oauth2_authorization`  (
  `id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `registered_client_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `principal_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `authorization_grant_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `attributes` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `state` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `authorization_code_value` blob NULL,
  `authorization_code_issued_at` timestamp(0) NULL DEFAULT NULL,
  `authorization_code_expires_at` timestamp(0) NULL DEFAULT NULL,
  `authorization_code_metadata` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `access_token_value` blob NULL,
  `access_token_issued_at` timestamp(0) NULL DEFAULT NULL,
  `access_token_expires_at` timestamp(0) NULL DEFAULT NULL,
  `access_token_metadata` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `access_token_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `access_token_scopes` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `oidc_id_token_value` blob NULL,
  `oidc_id_token_issued_at` timestamp(0) NULL DEFAULT NULL,
  `oidc_id_token_expires_at` timestamp(0) NULL DEFAULT NULL,
  `oidc_id_token_metadata` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `refresh_token_value` blob NULL,
  `refresh_token_issued_at` timestamp(0) NULL DEFAULT NULL,
  `refresh_token_expires_at` timestamp(0) NULL DEFAULT NULL,
  `refresh_token_metadata` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;


CREATE TABLE `oauth2_authorization_consent`  (
  `registered_client_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `principal_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `authorities` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`registered_client_id`, `principal_name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;



CREATE TABLE `oauth2_registered_client`  (
  `id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `client_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `client_id_issued_at` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
  `client_secret` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `client_secret_expires_at` timestamp(0) NULL DEFAULT NULL,
  `client_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `client_authentication_methods` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `authorization_grant_types` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `redirect_uris` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `scopes` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `client_settings` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `token_settings` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

先进行认证服务器相关配置

pom.xml引入依赖

注意!!!spring boot版本需2.6.x以上,是为后面升级成cloud做准备

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
</dependency>

<!-- 此依赖是个人公共依赖,你们引入其他具体依赖即可 -->
<dependency>
    <groupId>com.xxxx.iov</groupId>
    <artifactId>iov-cloud-framework-web</artifactId>
    <version>2.0.0-SNAPSHOT</version>
    <exclusions>
        <!-- 这里是因为公共依赖中的web版本太低,所以移除 -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.6.6</version>
</dependency>

<!-- hutool -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.0</version>
</dependency>

<!-- fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.39</version>
</dependency>

<!-- security -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<!-- oauth2-authorization-server -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-authorization-server</artifactId>
    <version>0.2.3</version>
</dependency>

<!-- security-cas -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-cas</artifactId>
</dependency>

<!-- thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<!-- 数据连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.9</version>
</dependency>

<!-- 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>

<!-- mybatis-plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

<!-- guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>

创建自定义登录页面 login.html (可不要,使用自带的登录界面)

<!DOCTYPE html>
<ht
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: spring-security-oauth2-authorization-server是一个基于Spring Security的OAuth2授权服务器,用于管理和授权访问受保护的资源。它提供了一组API和工具,使得开发人员可以轻松地实现OAuth2授权服务器,并支持多种授权方式和流程。该授权服务器可以与其他Spring框架集成,例如Spring Boot和Spring Cloud,以便更好地管理和保护应用程序的资源。 ### 回答2: Spring Security OAuth2 Authorization Server是一个强大的用户授权服务,它可以让用户安全地授权他们的敏感信息,以便客户端应用程序可以访问他们的资源。 它基于Spring的安全框架构建,与OAuth2协议规范兼容。OAuth2是一个授权协议,它允许用户授权客户端应用程序在用户的名义上访问他们的资源。Spring Security OAuth2 Authorization Server提供了多种授权模式,包括基于密码授权、刷新令牌和授权码授权等。 该服务还提供了一组API组件,使开发人员可以轻松地创建客户端应用程序并管理授权和令牌。通过使用Spring Security OAuth2 Authorization Server,开发人员可以保持持久的跨应用程序用户会话状态,并方便地跟踪和管理资源的访问。 Spring Security OAuth2 Authorization Server提供了一个安全的授权层,可以使用Token转义解决跨域请求的问题,支持多个授权模式,并支持动态客户端注册。此外,该服务还提供了一个管理界面,可用于管理授权信息、令牌和客户端应用程序的访问权限等。 最后,Spring Security OAuth2 Authorization Server还提供了一组可扩展的插件,可以通过它们扩展和定制授权流程和授权服务。这些插件可以轻松地扩展并与其他技术进行集成。 ### 回答3: Spring Security OAuth2 Authorization ServerSpring Security生态系统中的一个组件,是一种用于构建并管理OAuth2授权服务的框架。OAuth2是一种用于保护API、防止破坏攻击的开放标准,它提供了一种用于分离用户、应用程序和资源服务器之间的身份验证和授权的机制。它允许用户授权第三方应用程序访问他们在其他应用程序和服务上存储的服务。OAuth2授权服务是一个负责认证用户信息并授权访问令牌的服务器。 Spring Security OAuth2 Authorization Server提供一个开箱即用的OAuth2认证服务器,它提供了一些默认的配置和管理OAuth2令牌的选项。它还提供了一些简单和可扩展的API以支持OAuth2流程的不同阶段,从而帮助开发人员方便地创建和配置基于OAuth2的应用程序。 Spring Security OAuth2 Authorization Server的主要功能包括: 1. 提供一个可扩展的API,以便在不同的OAuth2流程阶段进行修改。 2. 附带默认的令牌存储实现。 3. 允许自定义授权和令牌端点。 4. 提供了可插拔的身份验证和授权机制,开发人员可以方便地配置和管理。 5. 允许开发人员创建和使用自定义的令牌存储实现。 6. 允许开发人员基于OAuth2协议为应用程序提供安全性。 总之,Spring Security OAuth2 Authorization Server为开发人员提供了一个可扩展的和可定制的OAuth2认证服务器,使得开发人员可以方便地构建基于OAuth2的应用程序。它简化了OAuth2认证的过程,帮助开发人员快速构建和部署安全且可靠的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值