Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务架构之「 访问安全 」

微服务架构之「 访问安全 」

作者头像
Bug开发工程师
发布于 2019-06-26 15:24:40
发布于 2019-06-26 15:24:40
9590
举报
文章被收录于专栏:码农沉思录码农沉思录

应用程序的访问安全又是我们每一个研发团队都必须关注的重点问题。尤其是在我们采用了微服务架构之后,项目的复杂度提升了N个级别,相应的,微服务的安全工作也就更难更复杂了。并且我们以往擅长的单体应用的安全方案对于微服务来说已经不再适用了。我们必须有一套新的方案来保障微服务架构的安全。

在探索微服务访问安全之前,我们还是先来回顾一下单体应用的安全是如何实现的。

一、传统单体应用如何实现「访问安全」?

下图就是一个传统单体应用的访问示意图:

(图片来自WillTran在slideshare分享)

在应用服务器里面,我们有一个auth模块(一般采用过滤来实现),当有客户端请求进来时,所有的请求都必须首先经过这个auth来做身份验证,验证通过后,才将请求发到后面的业务逻辑。

通常客户端在第一次请求的时候会带上身份校验信息(用户名和密码),auth模块在验证信息无误后,就会返回Cookie存到客户端,之后每次客户端只需要在请求中携带Cookie来访问,而auth模块也只需要校验Cookie的合法性后决定是否放行。

可见,在传统单体应用中的安全架构还是蛮简单的,对外也只有一个入口,通过auth校验后,内部的用户信息都是内存/线程传递,逻辑并不是复杂,所以风险也在可控范围内。

那么,当我们的项目改为微服务之后,「访问安全」又该怎么做呢。

二、微服务如何实现「访问安全」?

在微服务架构下,有以下三种方案可以选择,当然,用的最多的肯定还是OAuth模式。

  • 网关鉴权模式(API Gateway)
  • 服务自主鉴权模式
  • API Token模式(OAuth2.0)

下面分别来讲一下这三种模式:

  1. 网关鉴权模式(API Gateway)

(图片来自WillTran在slideshare分享) 通过上图可见,因为在微服务的最前端一般会有一个API网关模块(API Gateway),所有的外部请求访问微服务集群时,都会首先通过这个API Gateway,所以我们可以在这个模块里部署auth逻辑,实现统一集中鉴权,鉴权通过后,再把请求转发给后端各个服务。 这种模式的优点就是,由API Gateway集中处理了鉴权的逻辑,使得后端各微服务节点自身逻辑就简单了,只需要关注业务逻辑,无需关注安全性事宜。 这个模式的问题就是,API Gateway适用于身份验证和简单的路径授权(基于URL的),对于复杂数据/角色的授权访问权限,通过API Gateway很难去灵活的控制,毕竟这些逻辑都是存在后端服务上的,并非存储在API Gateway里。

  1. 服务自主鉴权模式

(图片来自WillTran在slideshare分享) 服务自主鉴权就是指不通过前端的API Gateway来控制,而是由后端的每一个微服务节点自己去鉴权。 它的优点就是可以由更为灵活的访问授权策略,并且相当于微服务节点完全无状态化了。同时还可以避免API Gateway 中 auth 模块的性能瓶颈。 缺点就是由于每一个微服务都自主鉴权,当一个请求要经过多个微服务节点时,会进行重复鉴权,增加了很多额外的性能开销。

  1. API Token模式(OAuth2.0)

(图片来自网络) 如图,这是一种采用基于令牌Token的授权方式。在这个模式下,是由授权服务器(图中Authorization Server)、API网关(图中API Gateway)、内部的微服务节点几个模块组成。 流程如下: 第一步:客户端应用首先使用账号密码或者其它身份信息去访问授权服务器(Authorization Server)获取 访问令牌(Access Token)。 第二步:拿到访问令牌(Access Token)后带着它再去访问API网关(图中API Gateway),API Gateway自己是无法判断这个Access Token是否合法的,所以走第三步。 第三步:API Gateway去调用Authorization Server校验一下Access Token的合法性。 第四步:如果验证完Access Token是合法的,那API Gateway就将Access Token换成JWT令牌返回。 (注意:此处也可以不换成JWT而是直接返回原Access Token。但是换成JWT更好,因为Access Token是一串不可读无意义的字符串,每次验证Access Token是否合法都需要去访问Authorization Server才知道。但是JWT令牌是一个包含JOSN对象,有用户信息和其它数据的一个字符串,后面微服务节点拿到JWT之后,自己就可以做校验,减少了交互次数)。 第五步:API Gateway有了JWT之后,就将请求向后端微服务节点进行转发,同时会带上这个JWT。 第六步:微服务节点收到请求后,读取里面的JWT,然后通过加密算法验证这个JWT,验证通过后,就处理请求逻辑。 这里面就使用到了OAuth2.0的原理,不过这只是OAuth2.0各类模式中的一种。

由于OAuth2.0目前最为常用,所以接下来我再来详细讲解一下OAuth2.0的原理和各类用法。

三、详解 OAuth2.0 的「 访问安全 」?

OAuth2.0是一种访问授权协议框架。它是基于Token令牌的授权方式,在不暴露用户密码的情况下,使 应用方 能够获取到用户数据的访问权限。

例如:你开发了一个视频网站,可以采用第三方微信登陆,那么只要用户在微信上对这个网站授权了,那这个网站就可以在无需用户密码的情况下获取用户在微信上的头像。

OAuth2.0 的流程如下图:

OAuth2.0 里的主要名词有:

  • 资源服务器:用户数据/资源存放的地方,在微服务架构中,服务就是资源服务器。在上面的例子中,微信头像存放的服务就是资源服务器。
  • 资源拥有者:是指用户,资源的拥有人。在上面的例子中某个微信头像的用户就是资源拥有者。
  • 授权服务器:是一个用来验证用户身份并颁发令牌的服务器。
  • 客户端应用:想要访问用户受保护资源的客户端/Web应用。在上面的例子中的视频网站就是客户端应用。
  • 访问令牌:Access Token,授予对资源服务器的访问权限额度令牌。
  • 刷新令牌:客户端应用用于获取新的 Access Token 的一种令牌。
  • 客户凭证:用户的账号密码,用于在 授权服务器 进行验证用户身份的凭证。

OAuth2.0有四种授权模式,也就是四种获取令牌的方式:授权码、简化式、用户名密码、客户端凭证。

下面来分别讲解一下:

  1. 授权码(Authorization Code) 授权码模式是指:客户端应用先去申请一个授权码,然后再拿着这个授权码去获取令牌的模式。这也是目前最为常用的一种模式,安全性比较高,适用于我们常用的前后端分离项目。通过前端跳转的方式去访问 授权服务器 获取授权码,然后后端再用这个授权码访问 授权服务器 以获取 访问令牌。

流程如上图。 第一步,客户端的前端页面(图中UserAgent)将用户跳转到 授权服务器(Authorization Server)里进行授权,授权完成后,返回 授权码(Authorization Code) 第二步,客户端的后端服务(图中Client)携带授权码(Authorization Code)去访问 授权服务器,然后获得正式的 访问令牌(Access Token) 页面的前端和后端分别做不同的逻辑,前端接触不到Access Token,保证了Access Token的安全性。

  1. 简化式(Implicit) 简化模式是在项目是一个纯前端应用,在没有后端的情况下,采用的一种模式。 因为这种方式令牌是直接存在前端的,所以非常不安全,因此令牌的有限期设置就不能太长。

其流程就是: 第一步:应用(纯前端的应用)将用户跳转到 授权服务器(Authorization Server)里进行授权,授权完成后,授权服务器 直接将 Access Token 返回给 前端应用,令牌存储在前端页面。 第二步:应用(纯前端的应用)携带 访问令牌(Access Token) 去访问资源,获取资源。 在整个过程中,虽然令牌是在前端URL中直接传递,但注意,令牌在HTTP协议中不是放在URL参数字段中的,而是放在URL锚点里。因为锚点数据不会被浏览器发到服务器,因此有一定的安全保障。

  1. 用户名密码(Resource Owner Credentials)

这种方式最容易理解了,直接使用用户的用户名/密码作为授权方式去访问 授权服务器,从而获取Access Token,这个方式因为需要用户给出自己的密码,所以非常的不安全性。一般仅在客户端应用与授权服务器、资源服务器是归属统一公司/团队,互相非常信任的情况下采用。

  1. 客户端凭证(Client Credentials)

这是适用于服务器间通信的场景。客户端应用拿一个用户凭证去找授权服务器获取Access Token。

以上,就是对微服务架构中「访问安全」的一些思考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农沉思录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
认证鉴权与API权限控制在微服务架构中的设计与实现(一)
引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现。 1. 背景 最近在做权限相关服务的开发,在系统微服务化后,原有的单体应用是基于session的安全权限方式,不能满足现有的微服务架构的认证与鉴权需求。微服务架构下,一个应用会被拆分成若干个微应用,每个微应用都需要对访问进行鉴权,每个微应用都需要明确当前访问用户以及其权限。尤其当访问来源不只是浏览器,还包括其他服务的调用时,单体应用架构下的鉴权方式就不是特别合适了
aoho求索
2018/04/03
3.3K0
认证鉴权与API权限控制在微服务架构中的设计与实现(一)
Spring Security---Oauth2详解
在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色:
大忽悠爱学习
2021/12/07
4.8K0
Spring Security---Oauth2详解
微服务架构下的统一身份认证和授权
本文讨论基于微服务架构下的身份认证和用户授权的技术方案,在阅读之前,最好先熟悉并理解以下几个知识点:
matinal
2020/11/27
4K0
微服务架构下的统一身份认证和授权
Spring Security入门4:各类软件技术架构中,如何保证安全性?
在架构设计中,应该考虑将安全防护机制分为多个层次,每个层次都有不同的安全措施和策略,确保全面覆盖系统的安全需求。在架构设计的早期阶段,应该对可能的威胁进行建模和分析,评估系统的风险,以便在设计中考虑相应的安全措施,在架构中加入严格的访问控制,包括身份验证、权限管理和安全策略等,确保只有授权的用户可以进行特定的操作,可以在系统中加入安全日志和监控机制,记录系统的操作和活动,及时发现和响应安全事件,以保证系统安全。
Designer 小郑
2023/11/21
3460
Spring Security入门4:各类软件技术架构中,如何保证安全性?
微服务安全认证架构是如何演进而来的?
之前有同事问为何要用基于JWT令牌的认证架构,然后近期又有童鞋在后台留言问微服务安全认证架构的实践,因此我决定花两篇推文来解答一下。为了答好这个话题,我们先来看看微服务的安全认证架构是如何演进而来的,从而更好地理解。
Edison Zhou
2020/07/25
4440
微服务安全认证架构是如何演进而来的?
微服务之服务监控和治理、容错隔离、Docker总结概述
1.Gauges(度量) 2.Counters(计数器) 3.Histograms(直方图) 4.Meters(TPS计算器) 5.Timers(计时器)
架构之家
2022/09/01
9520
微服务之服务监控和治理、容错隔离、Docker总结概述
微服务架构下的安全认证与鉴权
本文目录: 一、单体应用 VS 微服务 二、微服务常见安全认证方案 三、JWT介绍 四、OAuth 2.0 介绍 五、思考总结 从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化,身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用,如何保证高效安全的身份认证?面对外部的服务访问,该如何提供细粒度的鉴权方案?本文将会为大家阐述微服务架构下的安全认证与鉴权方案。 一、单体应用 VS 微服务 随着微服务架构的兴起,传统的单体应用场景下
yuanyi928
2018/03/30
3.6K0
微服务架构下的安全认证与鉴权
基于 Spring Security OAuth2和 JWT 构建保护微服务系统
常见的应用场景如下图,用户通过浏览器进行登录,一旦确定用户名和密码正确,那么在服务器端使用秘钥创建 JWT,并且返回给浏览器;接下来我们的请求需要在头部增加 jwt 信息,服务器端进行解密获取用户信息,然后进行其他业务逻辑处理,再返回客户端
allsmallpig
2021/02/25
1.2K0
认证鉴权也可以如此简单—使用API网关保护你的API安全
随着企业数字化进程的发展,企业正在大量使用 API 来连接服务和传输数据,API 在带来巨大便利的同时也带来了新的安全问题,被攻击的 API 可能导致重要数据泄漏并对企业业务造成毁灭性影响。因此,API 安全正受到业界和学术界的广泛关注。
克莱尔小熊
2021/12/26
10.8K2
认证鉴权也可以如此简单—使用API网关保护你的API安全
整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点:
庞小明
2018/07/30
1.9K1
微服务Token鉴权设计:概念与实战
在微服务架构中,鉴权是确保服务安全的重要环节。由于微服务往往由多个独立的服务组成,这些服务之间的通信需要一种高效、安全的鉴权机制。Token鉴权作为一种常用的鉴权方式,为微服务架构提供了简洁而有效的解决方案。本文将详细介绍几种Token鉴权方案,并通过实战示例展示其应用。
小马哥学JAVA
2024/04/30
1.3K0
OAuth 2.0 授权认证详解
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/06/20
2K0
OAuth 2.0 授权认证详解
与我一起学习微服务架构设计模式11—开发面向生产环境的微服务应用
为了使服务做好部署到生产环境中的准备,需要确保满足三个关键的质量属性:安全性、可配置性和可观测性。
java达人
2019/12/19
2K0
微服务权限
通过认证服务(oauth2-auth)进行统一认证,然后通过网关(oauth2-gateway)来统一校验认证和鉴权。采用Nacos作为注册中心,Gateway作为网关,使用nimbus-
花落花相惜
2021/12/07
7250
身份即服务背后的基石
近期所在部门基本完成了 IDaaS(身份即服务) 系统的改造,故将所涉及到的知识点总结成本文。
gopher云原生
2021/11/26
3K0
身份即服务背后的基石
【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0
在微服务场景中,身份认证通常是集中处理,这也是有别于单体应用一把梭哈的模式,其中,在微软微服务白皮书中,提供了两种身份认证模式:
DDGarfield
2022/06/23
1.6K0
【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0
聊聊微服务架构中的认证鉴权那些事
应用系统绕不开基础的鉴权,微服务架构推荐使用 HTTP 的方式进行服务间通信,这里推荐一篇介绍 HTTP 认证鉴的文章。
aoho求索
2021/11/25
3.3K0
聊聊微服务架构中的认证鉴权那些事
OAUTH2 的微服务安全-spring cloud快速入门教程
公开由许多微服务组成的公共访问 API 时要考虑的最重要方面之一是安全性。Spring 有一些有趣的特性和框架,使我的微服务安全配置更容易。在本文中,我将向您展示如何使用 Spring Cloud 和 Oauth2 在 API 网关后面提供令牌访问安全性。
jack.yang
2025/04/05
730
OAUTH2 的微服务安全-spring cloud快速入门教程
使用微服务架构思想,设计部署OAuth2.0授权认证框架
1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是这些WebAPI并不在一台服务器上,甚至可能是第三方提供的WebAPI。同时处于系统安全的架构设计,后端WebAPI是不能直接暴露在外面的;另一方面,我们这个新产品还有一个C/S系统,C端登录的时候,要求统一到B/S端登录,可以从C端无障碍的访问任意B/S端的页面,也可以调用B/S系统的一些API,所以又增加了
用户1177503
2018/05/28
11.5K1
深入聊聊微服务架构的身份认证问题
随着微服务架构的兴起,传统的单体应用场景下的身份认证和鉴权面临的挑战越来越大。单体应用体系下,应用是一个整体,一般针对所有的请求都会进行权限校验。请求一般会通过一个权限的拦截器进行权限的校验,在登录时将用户信息缓存到 session 中,后续访问则从缓存中获取用户信息。
lyb-geek
2018/07/26
1.8K0
深入聊聊微服务架构的身份认证问题
推荐阅读
相关推荐
认证鉴权与API权限控制在微服务架构中的设计与实现(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档