Spring Cloud Security

news2024/10/6 23:25:03

Spring Cloud Security

    Spring Cloud Security用于构建微服务的安全应用程序和服务,它可以轻松实现微服务系统架构下的统一安全认证与授权。
    Spring Cloud Security 有以下组件。

  1. spring-cloud-security:为Zuul、Feign、Oauth 2.0 的Resource Server 的Token中继提供支持。
  2. spring-cloud-starter-security:管理在Spring Cloud中使用Spring Security的依赖。
  3. spring-cloud-starter-oauth:管理在Spring Cloud 中使用Spring Security Oauth2的依赖。

1. OAuth 2.0 概述

    OAuth 2.0是一个标准的授权协议。实际上它是用户资源和第三方应用之间的一个中间层,把资源和第三方应用隔开,使得第三方应用无法直接访问资源,第三方应用要访问资源需要通过提供凭证获得OAuth 2.0授权,从而起到保护资源的作用。
    如果智艺安拥有者允许第三方访问资源,则可以将用户名和密码告诉第三方应用,让第三方应用直接以资源所有者的身份进行访问。还可以不提供用户名和密码,而通过授权的方式让第三方应用进行访问。
    比如,微信公众号授权提醒就还是OAuth2.0 的一个应用场景。页面弹出一个提示框提示需要获取我们的个人信息。如果我们单击“确认”按钮,则授权第三方应用获取我们在微信公众平台中的个人信息。

1.1 OAuth 2.0 的角色

    在OAuth 2.0 的认证授权过程中,主要涉及以下4种角色。
    (1)授权的服务提供方(Authorization Server)。它是安全服务器,进行访问的认证和授权。
    (2)资源所有者(Resource Owner)。一般情况下,用户就是资源的所有者,比如用户的头像、照片、名称和手机号等私有数据。
    (3)资源服务器(Resource Server)。存在用户资源的服务器。
    (4)客户端(Client)。它可以是任何第三方应用,与授权和资源服务提供方无关。在用户授权第三方获取用户私有资源后,第三方通过获取到Token等信息通过授权服务器认证,然后去资源服务器获得资源。

1.2 OAuth 2.0 的运行流程

OAuth 2.0 运行流程图

  1. 用户打开客户端,客户端要求用户给予授权。
  2. 用户同意给客户端授权。
  3. 客户端使用上一步获得的授权向安全服务器申请令牌。
  4. 安全服务器对客户端进行认证,在确认无误后发放令牌。
  5. 客户端使用令牌向资源服务器申请获取资源。
  6. 资源服务器确认令牌无误,向客户端开放资源。

2.客户端的授权模式

    客户端必须得到用户的授权(Authorization Grant)才能获得令牌(Access Token)。OAuth 2.0 定义了4中授权方式。

  • 密码模式(Resource Owner Password Credentials Grant)。
  • 客户端模式(Client Credentials Grent)。
  • 简化模式(Implicit Grant)。
  • 授权码模式(Authorization Code Grant)。

2.1 密码模式

    在密码模式中,用户向客户端提供自己的用户名和密码。客户端使用这些信息向“服务商提供商”申请授权。如下图。
密码模式在这里插入图片描述
    在这种模式中,用户必须把自己的密码给客户端,这就存在安全隐患,不能保证客户端不存储用户密码。所以这种模式通常用在用户对客户端高度信任的情况下,比如客户端是操作系统或者由一个著名公司出品。一般只有在其他授权模式无法执行的情况下,才考虑使用这种模式。

     具体运行过程如下:
    (1)用户向客户端提供用户名和密码。
    (2)客户端将用户名和密码发给安全服务器,向其请求令牌。
             客户端发出的HTTP请求中包含一下参数。

  • grant_type:授权类型,此处的值固定为“password”,必选项。
  • username:用户名,必选项。
  • password:用户的密码,必选项。
  • scope:权限范围,可选项。

    (3)安全服务器确认无误后向客户端提供访问令牌。

2.2 客户端模式

    客户端模式指,客户端以自己的名义向“安全服务器”进行认证。这种模式不存在授权问题。运行过程如下图。
客户端模式
    (1)客户端向安全服务器进行身份认证,并申请一个访问令牌。
    客户端发出的HTTP请求中包含以下参数。

  • grant_type:授权类型,此处的值固定为“clientcredentials”,必选项。
  • scope:权限范围,可选项。

    (2)安全服务器确认无误后向客户端提供访问令牌。

3.简化模式

    简化模式指,客户端不通过第三方应用程序的服务器,直接在浏览器中向安全服务器申请令牌。所有步骤都在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。运行过程如下图。
简化模式
    (1)客户端通过浏览器将用户导向安全服务器。
    客户端发出的HTTP请求包含以下参数。

  • response_type:授权类型,此处的值固定为“ token”,必选项。
  • client_id:客户端的ID,必选项。
  • redirect_uri:重定向的URI,可选项。
  • scope:权限范围,可选项。
  • state:客户端的当前状态,可以指定任意值,安全服务器会原封不动地返回这个值。注意,这个参数必须填写,否则会存在CSRF漏洞。安全服务器在将用户代理重定向时会带上该参数。

    (2)用户决定是否授权客户端。
    (3)如果用户给予授权,则安全服务器将用户导向客户端指定的“重定向URI”,并在该URI的Hash参数值部分包含访问令牌。
    安全服务器回应客户端的URI中包含以下参数。

  • access_token:访问令牌,必选项。
  • token_type:令牌类型,该值大小写不敏感,必选项。
  • expires_in:过期时间,单位为秒。如果省略该参数,则必须使用其他方式设置过期时间。
  • scope:权限范围,如果与客户端申请的范围一致,则此项可省略。
  • state:如果在客户端的请求中包含这个参数,则在安全服务器的回应中也必须一模一样包含这个参数。

    (4)客户端通过浏览器向资源服务器发出请求,其中不包括上一步收到的Hash 值。
    (5)资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。
    (6)浏览器执行上一步获得的脚本,提取出令牌。
    (7)浏览器将令牌传送给客户端。

4.授权码模式

    在授权码模式中,客户端是通过其后台服务器与安全服务器进行交互的。运行过程如下图。

授权码模式
    (1)用户访问客户端。
    (2)客户端将用户导向安全服务器。
客户端申请宁认证的URI中包含以下参数。

  • response_type:授权类型,必选项,此处的值固定为“code”。
  • client_id:客户端的ID,必选项。
  • redirect_uri:重定向URI,可选项。
  • scope:申请的权限范围,可选项。
  • state:客户端的当前状态,可以指定任意值,安全服务器会原封不动地返回这个值。这个参数应该填写,建议state参数用动态数据,否则会存在CSRF漏洞。

    (3)用户选择是否给客户端授权。
    (4)如果用户同意授权,则安全服务器会将用户导向到客户端事先指定的“重定向URI”,并附上一个授权码。
    服务器回应客户端的URI中包含以下参数。

  • code:授权码,必选项。该码的有效期应该很短,通常为几分钟。客户端只能使用该码一次,否则会被授权服务器拒绝。该码与客户端的ID和重定向URI是对应关系。
  • state:如果在客户端的请求中包含这个参数,则安全服务器的回应也必须一模一样包含这个参数。

    (5)客户端收到授权码,附上“重定向URI”,向安全服务器申请令牌。
    客户端向安全服务器申请令牌的HTTP请求包含一下参数。

  • grant_type:使用的授权模式,必选项。授权码模式的值为“authorization_code”。
  • code:上一步获得的授权码,必选项。
  • redirect_uri:重定向URI,必选项,且必须与步骤(2)中的该参数值保持一致。
  • client_id:客户端ID,必选项。

    (6)安全服务器核对授权码和重定向URI,确认无误后向客户端发送访问令牌(access_token)和更新令牌(refresh_token)。
    安全服务器发送的HTTP回复中包含以下参数。

  • access_token:访问令牌,必选项。
  • token_type:令牌类型,该值大小写不敏感,必选项,可以是Bearer等类型。
  • expires_in:过期时间,单位为秒。
  • refresh_token:更新令牌,可选项。
  • scope:权限范围。如果其范围与客户端申请的范围一致,则此项可省略。

    如果在用户访问时客户端的“访问令牌”已经过期,则用户需要用更新令牌申请一个新的访问令牌。
    客户端发出更新令牌的HTTP请求包含以下参数。

  • grant_type:使用的授权模式,必选项。
  • refresh_token:刷新令牌。通过以上授权获得的刷新令牌来获取新的令牌,必选项。
  • scope:申请的授权范围,不可以超出上一次申请的范围。如果省略该参数,则表示与上一次一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT5是否会影响人类的发展和工作?

目录前言ChatGPT5是什么ChatGPT5 的潜在影响挑战与风险总结前言 ChatGPT的普及也带来了大量的讨论,关于它是否会影响人类的发展和工作。本文将讨论 ChatGPT5 如何可能改变人类的工作和发展,以及潜在的利弊和挑战。在话题开始之前,让我们先从…

QxOrm的使用-数据操作--增删改查

文章目录QxOrm的使用-数据操作使用QxOrm对数据库进行增删改查新增数据删除数据修改数据查询数据QxOrm的使用-数据操作 上一篇我们讲了QxOrm的基本的数据映射操作,这里面再补充一点东西 数据类型映射 Qt/C类型数据库类型boolSMALLINTqx_boolSMALLINTshortSMALLINT…

【谷粒商城之整合阿里云OSS对象存储】

本笔记内容为尚硅谷谷粒商城整合阿里云OSS对象存储部分 目录 一 、简介 二、云存储开通与使用 1、开通阿里云对象存储服务 2、创建bucket 3、创建子用户(获取密钥访问OSS服务器) 给该子账户添加权限 4、阿里云对象存储上传方式 三、整合 1、…

BUUCTF--Web篇详细wp

BUUCTF--Web篇详细wp[极客大挑战 2019]EasySQL[极客大挑战 2019]Havefun[HCTF 2018]WarmUp[ACTF2020 新生赛]Include[ACTF2020 新生赛]Exec[强网杯 2019]随便注[GXYCTF2019]Ping Ping Ping[SUCTF 2019]EasySQL[极客大挑战 2019]Secret File[极客大挑战 2019]LoveSQL[极客大挑战…

MySQL 分布式数据库实现:无需修改代码,轻松实现分布式能力

这个项目做什么 ShardingSphere-Proxy,可以让用户像使用原生数据库一样使用 Apache ShardingSphere。 了解一项技术的开始,一般从官网开始。先来看一看官网对 ShardingSphere-Proxy 的定义是什么样的: 定位为透明化的数据库代理端&#xff…

异配图神经网络——Graph Transformer Networks

一.论文概述 作者提出了Graph Transformer Network (GTN)用来在异配图(heterogeneous graph)上学习节点表示。通过Graph Transformer层,模型能将异构图转换为由meta-path定义的多个新图,这些meta-paths具有任意的边类型和长度&am…

运行Spring Boot项目时[ java: 错误: 不支持发行版本 17 ]

项目场景: 使用IDEA的Spring Initializr构建的Spring boot项目在构建完成后运行出错 问题描述: 用Spring Initializr创建了Spring Boot 项目后,运行时报错: “错误:java: 错误: 不支持发行版本 17”根据错误信息得知&#xff…

Vue学习笔记(5. 计算属性,监视器(侦听器))

1. 计算属性(computed) (1) get方式 初期显示 改变值后(hello -> hello1)计算属性allStr跟随变更 (2) get set方式 页面初期显示 改变值(hello -> hello1)计算属性的get会监控到变更,使…

国产SSD、内存卷哭国外大厂,三星宣布减产涨价在路上了

PC 圈有一句话是这么说的:论价格屠夫还得看国产品牌! 可不是嘛,国产长鑫、长江算是彻底将全球存储芯片市场搅局者这一「骂名」坐实了! 不说特别早期,前几年吧,普通单条 8G DDR4 内存都能卖到六七百元&…

C++ 红黑树

1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍,因…

D. Many Perfect Squares

题目链接:Problem - D - Codeforces 题意:给你一个数组,大小不超过50个。 问你让他们全部加上一个x,构造出来最多能够有多少个完全平方数。 思路: 先对数组排个序,首先它最少一定是有一个的&#xff0c…

Git配置SSH步骤

一、git 配置 (1)打开 git 命令窗口 (2)配置用户名(填自己的姓名) git config --global user.name “linjiaxiaozhu” (3)配置用户邮箱(填自己的邮箱) git…

电脑录屏的视频保存在哪里?您可以这样查看

案例:电脑录屏之后保存到哪里去了? “前几天,根据网络上的录屏教程试着录制了一下我的电脑屏幕,录制完成之后却找不到录制的视频。有没有小伙伴知道电脑录屏的视频保存在哪里?怎样才能快速找到?” 在现代…

pandas数据聚合和重组

介绍pandas数据聚合和重组的相关知识,仅供参考。 目录 1GroupBy技术 1.1简介 1.2对分组进行迭代 1.3选取一个或一组列 1.4通过字典或Series进行分组 1.5利用函数进行分组 2数据聚合 2.1简介 2.1面向列的多函数应用 2.2以‘无索引’的方式返回聚合数据 1G…

Faster R-CNN

目录 1. Fast R-CNN的不足 2. Faster R-CNN 3. RPN(Region Proposal Network) 3.1 anchor 3.2 RPN 网络 3.3 RPN 网络的损失 4. Faster R-CNN 损失 5. Faster R-CNN 训练 6. 对比 1. Fast R-CNN的不足 Fast R-CNN 的算法流程 Fast R-CNN网络运行速度慢的最主要原因&a…

浅谈根号分治与分块

文章目录1. 根号分治哈希冲突2. 线性分块引入教主的魔法[CQOI2011] 动态逆序对[国家集训队] 排队[HNOI2010] 弹飞绵羊蒲公英1. 根号分治 哈希冲突 题目1 nnn 个数,mmm 次操作。操作 1 为修改某一个数的值,操作 2 为查询所有满足下标模 xxx 等于 yyy 的…

一、基础算法6:双指针算法 模板题+算法模板(最长连续不重复子序列,数组元素的目标和,判断子序列)

文章目录算法模板双指针算法模板最长连续不重复子序列模板暴力法双指针算法数组元素的目标和模板判断子序列模板模板题最长连续不重复子序列原题链接题目题解数组元素的目标和原题链接题目题解判断子序列原题链接题目题解算法模板 双指针算法模板 for (int i 0, j 0; i <…

ForkJoinPool + RecursiveTask 来计算数组元素和

ForkJoinPool 是什么&#xff1f; ForkJoinPool 是一个 Java 并发编程框架&#xff0c;用于解决分治算法中的任务拆分、执行、合并等问题&#xff0c;是 Java 7 引入的一个新的工具类。 ForkJoinPool 的基本思想是将一个大任务划分成若干个小任务&#xff0c;然后并行执行这些…

SQL AVG函数

SQL AVG函数 SQL AVG函数简介 SQL AVG函数是一个聚合函数&#xff0c;用于计算集合的平均值。 以下说明了SQL AVG函数的语法&#xff1a; AVG([ALL|DISTINCT] expression)如果使用ALL关键字&#xff0c;AVG函数将获取计算中的所有值。 默认情况下&#xff0c;无论是否指定&a…

python+vue 图书馆读者行为分析系统-书友会

本系统主要包括以下功能模块&#xff1a;个人中心、用户管理、图书信息管理、图书分类管理、热门图书管理、书友会管理、报名信息管理、行为分析管理、在线论坛、系统管理等模块&#xff0c;通过这些模块的实现能够基本满足日常图书馆读者行为分析系统的操作。结合相关设计模式…