微服务认证解决方案

之前整理的微服务认证文档,分享一下

微服务认证解决方案

    • 1.Token认证有两种方式:OAuth2.0,JWT
    • 2. oAuth2.0授权方式
      • 2.1授权码模式:
      • 2.2简化模式:
        • 简化模式详细介绍
      • 2.3密码模式:
        • 密码模式详细介绍
      • 2.4客户端模式:
      • 2.5结论:选择密码模式
    • 3.依据用户名和密码,获取token验证,访问资源服务器流程
    • 4 .名词解释

微服务认证有四种解决方案,分别是:单点登录SSO方案、分布式会话(Session)方案、客户端令牌(Token)方案,客户端和API网关结合;

  • 单点登录方案:是最常见的解决方案,但是每个与用户交互的服务,都需要通过认证服务器通信,会产生大量的重复认证,和网络碎片流量。
  • 分布式会话方案 :将用户信息session 共享存储;当用户访问微服务时,直接从共享存储中获取。该解决方案在高可用和扩展方面很好,但是会话信息保存到共享存储中,要保证数据安全这块,实现复杂度比较高。
  • 客户端网络令牌方案:令牌有客户端生成,并由认证服务器签名,在令牌中包含足够的信息,客户端在请求时会将令牌附件在请求上,从而为为各个微服务提供用户身份认证。但是如何及时的注销用户认证则是一个大问题。
  • 客户端令牌和API网关结合 :通过微服务架构中实施API网关,将原始的客户端令牌转化为内部的令牌,一方面可以有效的隐藏服务,另一方面通过API网关的通一入口可以实现令牌的注销处理。
  • 综上所述,采用客户端令牌和API网关,解决了会话信息的安全和及时注销用户认证问题。

基于令牌(token)包含几层含义:

  • 令牌是认证用户信息的集合。
  • 令牌包含了足够的信息,验证令牌就可以完成用户的身份的验证。
  • 服务器会通过HTTP头部中的Authorization获取令牌信息并进行检查,并不需要在服务端存储任何信息。
  • 通过服务端验证令牌检查机制,可以应用在浏览器,和其他第三方应用程序上。
  • 支持夸程序的调用。Cookie是不支持跨域访问,而token不存在这个问题。

1.Token认证有两种方式:OAuth2.0,JWT

OAuth2.0 授权流程
1)用户打开客户端后,客户端要求用户给预授权
2)用户同意给予客户端授权
3)客户端使用上一步的授权,向认证服务器申请令牌
4)认证服务器对客户端进行认证,确定无误后同意发放令牌
5)客户端使用令牌,向资源服务服务器申请资源
6)资源服务器确认无误后,同意向客户端开发资源

在这里插入图片描述

2. oAuth2.0授权方式

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。oAuth 2.0 定义了四种授权方式。

  • implicit:简化模式,不推荐使用
  • authorization code:授权码模式
  • resource owner password credentials:密码模式
  • client credentials:客户端模式

2.1授权码模式:

1.用户访问客户端(应用界面);
2.客户端将用户引导到授权服务器上
3.用户是否同意客户端授权;
4.如果同意授权,授权服务器将重定到客户端事先指定的地址,同时附加上授权码(token)
5.客户端收到授权码后,同时附加上要访问的页面,经客户端后台服务向授权服务器申请令牌;
6.授权服务验证授权码后,向客户端发送访问令牌(Access Token)和更新令牌(Refresh Token)并重新制定上步指定的地址;

在这里插入图片描述

2.2简化模式:

指不通过客户端的后台服务器来获取访问令牌,客户端一般指的是浏览器,客户端通过脚本语言(一般是javascript)来完成授权服务器申请服务器的操作;

简化模式详细介绍

简化模式适应于纯静态页面;所谓的纯静态界面应用,也就是应用没有在服务器代码执行的权限,(通常把代码托管在别人服务器上),只有js代码的控制权限。
这种场景下,应用没有持久化的能力。因此按照oAuth2.0的规定,这种应用拿不到Refresh Token的。其授权流程入下图 。

在这里插入图片描述

2.3密码模式:

密码模式是指客户端通过用户提供的用户名和密码信息,直接通过授权信息服务器来获取授权。这种模式下,用户把自己用户名和密码提供给客户端,但是客户端不保存这些信息。
该模式使用,客户端高度信任的情况下。

该模式授权流程:
1.用户向客户提供相应的用户名和密码
2.客户端依据用户提供的用户名和密码,向授权服务器请求令牌
3.授权服务确认后,返回 令牌给客户端

密码模式详细介绍

密码模式中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向“服务提供商”索要授权(即:向授权服务器索要服务请求令牌)。在这种模式下,用户必须把用户名和密码给客户端,但是客户端不存储密码。这通常在用户端对客户端高度信任的情况下,比如客户端是操作系统的一部分。

一个典型的例子,同一个企业的不同产品要使用本企业的oAuth2.0体系。有些情况下产品希望能够定制化,授权界面。由于同一个企业,不需要授权通过授权界面来,询问用户授权意向,而只需要认证用户身份即可。这个时候产品研发定制授权界面,用户输入用户名和密码,并直接传递给授权进行授权即可。

在这里插入图片描述

2.4客户端模式:

指客户端以自己的名义而不是用户的名义,向授权服务器进行认证;
客户端模式详细介绍
如果信任关系再进一步,或者调用者是一个后端的模块,没有用户界面的时候,可以使用客户端模式。鉴权服务器直接对客户端进行身份验证,验证通过后,返回 token。

在这里插入图片描述

2.5结论:选择密码模式

由于,简化模式整体过程,整个过程在前端界面实现,这里不建议使用,authorization code,虽然是最安全的,最严密的,但是网络交互比较多,由于cem项目是内网实现,相应的API开发的接口不会放在外网,因此建议在密码模式和客户端模式中,二者选择其中一个,建议选择,密码模式;
由于cem产品基本上部署打内网环境,建议选择密码模式,鉴权服务器直接对客户端用户输入的,用户名和密码,进行身份验证,换取token。

总结 依据产品实际情况出发,选择适合当前场景的 认证方式;

3.依据用户名和密码,获取token验证,访问资源服务器流程

后续补充

4 .名词解释

名词解释

  • 第三方应用程序(Third-party application): 又称之为客户端(client),比如上节中提到的设备(PC、Android、iPhone、TV、Watch),我们会在这些设备中安装我们自己研发的 APP。又比如我们的产品想要使用 QQ、微信等第三方登录。对我们的产品来说,QQ、微信登录是第三方登录系统。我们又需要第三方登录系统的资源(头像、昵称等)。对于 QQ、微信等系统我们又是第三方应用程序。
  • HTTP 服务提供商(HTTP service): 我们的云笔记产品以及 QQ、微信等都可以称之为“服务提供商”。
  • 资源所有者(Resource Owner): 又称之为用户(user)。
  • 用户代理(User Agent): 比如浏览器,代替用户去访问这些资源。
  • 认证服务器(Authorization server): 即服务提供商专门用来处理认证的服务器,简单点说就是登录功能(验证用户的账号密码是否正确以及分配相应的权限)
  • 资源服务器(Resource server): 即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。简单点说就是资源的访问入口,比如上节中提到的“云笔记服务”和“云相册服务”都可以称之为资源服务器。

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

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

相关文章

I.MX6开发板移植Linux4.1.15内核之TSC2007触摸屏设备树信息的添加

之前写过一篇3.0.35内核移植关于TSC2007触摸屏驱动移植的文章。里面对TSC2007.c驱动程序的分析比较清晰,点击链接查看:点击链接查看 本篇文章,主要记录在4.1.15内核移植的过程中,对于TSC2007设备的添加,需要如何添加设…

C#中使用DES和AES加密解密

代码usingSystem;usingSystem.Text;usingSystem.Security.Cryptography;usingSystem.IO;namespaceMyCryptography{ ///<summary>///DES加密解密 ///</summary>publicclassDES { ///<summary>///获取密钥 ///</summary>privates…

java思维导图

Java思维导图1. java 基础知识思维导图2. juc知识点总结3. 缓存相关知识4. 性能调优5.深入理解java 虚拟机&#xff08;感谢分享&#xff09;6. javaNIO&#xff08;IO&#xff09;1. java 基础知识思维导图 2. juc知识点总结 3. 缓存相关知识 4. 性能调优 5.深入理解java 虚拟…

【剑指offer - C++/Java】1、二维数组中的查找

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 题目链接&#xff1a; 二维数组中的查找 文章目录题目描述&#xff1a;解题思路方法1方法2总结题目描述&#xff1a; 在一个二维数组中&#xff08;每…

一个显示页码用的helper。。。

没想到这么不起眼的东西杀了我不少脑细胞…… 在控制台中测试没发现啥问题&#xff0c;代码风格什么的就先不管它了 public static class PageNumExt {public delegate void ToDo(long i);public delegate void PadToDo();public static void GeneratePageNum(this object o,lo…

前端学习(142):行级标签和块级标签

块级标签&#xff1a;(block) 1、独占一行&#xff0c;不和其他元素待在同一行&#xff0c;宽度自动填满父元素宽度 2、能设置weight(宽)、height(高)属性 3、可以设置margin&#xff0c;padding属性 常见的块级标签&#xff1a; <address>&#xff0c;定义地址 &l…

【剑指offer - C++/Java】2、替换空格

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 题目链接&#xff1a; 替换空格 文章目录题目描述解题思路总结题目描述 请实现一个函数&#xff0c;将一个字符串中的每个空格替换成“%20”。例如&am…

c#保留小数点后位数的方法

c#保留小数点后位数的方法 Double dValue 95.12345; int iValue 10000; string strValue "95.12345"; string result ""; result Convert.ToDouble(dValue).ToString("0.00");//保留小数点后两位,结果为95.12 …

数据仓设计

TOC 数据仓库&#xff0c;这里采用层级的设计方式&#xff0c;设计的粒度&#xff0c;依据业务的复杂度而定&#xff1b; 这里只是介绍 数据仓库的设计&#xff0c;后续补充一下&#xff0c;具体的实现细节和使用工具&#xff1b;

【OS学习笔记】一 处理器、内存和指令

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 我们已经知道&#xff0c;处理器是一台电子计算机的核心&#xff0c;它会在振荡器脉冲的激励下&#xff0c;从内存中获取指令&#xff0c;并发起一系列…

AS3 CookBook学习整理(八)

1. AS3的事件机制 事件流机制即为捕获--目标--冒泡,分别对应event.eventPhase的值1(EventPhase.CAPTURING_PHASE)&#xff0c;2(EventPhase.AT_TARGET)&#xff0c;3(EventPhase.BUBBLING_PHASE) 假设有3个Sprite&#xff0c;分别为绿、蓝、黄(如图),层叠关系为绿色包含蓝色&am…

边缘计算+云计算

后续更新中 边缘计算云计算&#xff1a; 促进企业数字化向数智化发展概念1.以下是边缘计算的四个组织2. 边缘设备对IoT的增强作用 &#xff08;更新&#xff09;3. 边缘计算应用于IoT的四个层次4. AI在边缘设备计算领域的三种应用场景5. 云服务架构6.案例解析6.1国家电网&#…

参商

人生不相见&#xff0c;动如参与商。今夕复何夕&#xff0c;共此灯烛光。 少壮能几时&#xff0c;鬓发各已苍。访旧半为鬼&#xff0c;惊呼热中肠。 焉知二十载&#xff0c;重上君子堂。昔别君未婚&#xff0c;儿女忽成行。 怡然敬父执&#xff0c;问我来何方。问答乃未已&a…

CSS强制按比例缩小图片

<title>CSS强制按比例缩小图片</title><style>img,a img{ border:0; margin:0; padding:0; max-width:200px; width:expression(this.width>200?"200px":this.width); max-height:200px; height:expression(this.height>200?"200px…

【剑指offer - C++/Java】3、从尾到头打印链表

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 牛客网题目链接&#xff1a; 从尾到头打印链表 文章目录题目描述1、递归解法1.1、 递归解法一java代码&#xff1a;C代码分析&#xff1a;1.2 递归解法…

网络协议之http和tcp思维导图

http协议和tcp协议之前学的整理一部分&#xff0c;后续更新

Oracle 10g Audit(审计) --- 记录登录用户在Oracle中的所有操作(转)

由于项目平台管理的需要&#xff0c;最近在研究Oracle 10G的审计功能&#xff0c;以便记录和跟踪用户在Oracle数据库系统中的所有操作行为&#xff0c;进而提高Oracle的安全性。现在把审计功能的配置步骤分享出来&#xff0c;供大家参考&#xff1a; 1、以DBA登录Oracle # su -…

【剑指offer - C++/Java】4、重建二叉树

牛客网题目链接&#xff1a;重建二叉树 文章目录0 题目描述&#xff1a;1、题目分析2、代码2.1、java代码2.2 C代码3、总结0 题目描述&#xff1a; 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字…

Windows下Android开发环境 搭建

1、 下载Android SDK &#xff08;1&#xff09;官网下载解压后即可用。 在http://androidappdocs.appspot.com/sdk/index.html 下选择 合适自己的平台下载&#xff0c;下载后解压 运行 【SDK Setup.exe】 出现在线安装包。 会出现“Failed to fetch URL https://dl-ssl.google…

【OS学习笔记】二 汇编语言和汇编软件

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章讲解了处理器&#xff0c;内存&#xff0c;和指令。学习了Intel 8086处理器的相关知识&#xff0c;如Intel通用寄存器的作用&#xff0c;程…