查阅了大多数相关资料,总结设计一个IdentityServer4认证授权方案,我们先看理论,后设计方案。

1、快速理解认证授权

我们先看一下网站发起QQ认证授权,授权通过后获取用户头像,昵称的流程。

1、输入账号密码,QQ确认输入了正确的账号密码可以登录 --->认证

2、下面需要勾选的复选框(获取昵称、头像、性别)----->授权 

点击授权并登录后,登录后就可以凭借QQ授权的授权码去获取昵称、头像、性别了。

是不是看起来流程很简单?对,就是这么简单,换成我们自己的网站也是一样的。

比如公司开发出很多业务网站,网站1、网站2、网站3......,然后我们想使用同一个账号登录后,其他网站打开也是登录状态。

这个时候只需要有一个统一认证登录平台(类似于QQ认证授权),然后就可以实现了,避免了一个网站一个账号,每次都需要输入账号密码的情况了。

2、IdentityServer4的概念?

IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID ConnectOAuth 2.0协议的实现。

看下面这张图理解一下这个概念,看不懂?没关系,不影响你敲代码的速度,接着往下看。

对上图各个节点的解释:

IdentityServer

  身份认证服务器是一个实现了OpenID Connect和OAuth 2.0协议的身份提供者,它负责向客户端发布安全令牌

User

  使用注册客户端访问资源的用户

Client

客户端从标识服务器请求令牌,要么用于认证用户(请求身份令牌),要么用于访问资源(请求访问令牌)
        客户端必须首先在身份服务器上注册,然后才能请求令牌
       这里的客户端可以是web应用程序、native mobile, desktop applications, SPA 等程序

Resource
  资源是你想要用身份认证服务器保护的东西,如:用户的身份数据或api
  每个资源都有一个惟一的名称,客户端使用这个名称来指定他们想要访问的资源
  关于用户的身份数据标识(也称为claim),例如姓名或电子邮件地址

Identity Token
  身份令牌代表身份验证过程的结果

Access Token
  访问令牌授权客户端以允许访问哪些API资源,访问令牌包含客户端和用户的信息

2.1、OpenID Connect(认证)

OpenID Connect由OpenID基金会于2014年发布的一个开放标准, 是建立在OAuth 2.0协议上的一个简单的身份标识层, OpenID Connect 兼容 OAuth 2.0. 实现身份认证(Authentication)

参考资料:https://openid.net/connect/

OpenID Connect文档:https://openid.net/specs/openid-connect-discovery-1_0.html

这里用JSON Web Token(JWT:RFC7519),它包含一组关于用户身份的声明(claim),如:用户的标识(sub)、颁发令牌的提供程序的标识符(iss)、创建此标识的Client标识(aud),还包含token的有效期以及其他相关的上下文信息。

2.2、OAuth2.0(授权)

OAuth2.0是一个开放的工业标准的授权协议(Authorization),它允许用户授权让第三方应用直接访问用户在某一个服务中的特定资源,但不提供给第三方账号及密码信息。

参考资料:https://www.cnblogs.com/xiandnc/p/9763121.html

OAuth2.0 文档:https://tools.ietf.org/html/rfc6749#page-73

OAuth2.0四种授权方式:http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

认证是身份识别,鉴别你是谁;

授权是授权许可,告诉你可以做什么。

如上图的网站发起QQ认证授权,登录QQ是认证身份,鉴别你是谁,勾选复选框授权是授权许可,告诉你可以做什么(读取头像,昵称、性别)。

具体概念就不展开了,大家点击上面的参考资料可以了解详细内容,OAuth整体流程如下:

客户端必须得到用户的授权,才能获取令牌。

OAuth2.0定义了四种授权方式(除了这是四种,可以自定义授权模式,如:短信模式、邮箱模式等):

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

2.3、IdentityServer4功能特性

用户认证服务

  基于OpenID Connect实现的独立的认证服务实现对多平台(web, native, mobile, services)的集中认证

API访问授权

  为各种类型的客户机颁发api访问令牌,例如服务器到服务器、web应用程序、spa和native/mobile程序

联合身份认证

  支持外部身份提供者,如Azure Active Directory、Google、Facebook等

定制化的实现

  IdentityServer4的许多方面可以定制以满足您的需要,因为它是一个框架,而不是SaaS服务,所以可以通过编写代码来调整实现,以适应不同的场景

成熟的开原方案

  使用许可的Apache2开源协议,允许在其之上构建商业产品,也作为.NET基金会支持的项目 (https://dotnetfoundation.org/projects?type=project&ps=10&pn=6

提供免费的商业支持

  官方可以对使用者提供部分的免费商业支持

3、场景演示:认证授权系统架构设计方案

电商场景设计方案(初稿)

系统架构图如下:

这张架构图缺点:

  • 发布频繁,发布影响整个系统;
  • 很难做到敏捷开发;
  • 维护性可能会存在一定的弊端,主要看内部架构情况;

大多数对于多客户端登录授权来说可能已经实现了Oauth 2.0 的身份授权验证,但是是和业务集成在一个网关里面,这样不是很好的方式;

我们可以把里面的很多业务单独建立一个独立的网关(比如代理商业务,或者其他比较频繁操作的业务以及第三方业务),并且把授权服务一并独立出来,调整后的系统架构图如下:

身份授权从业务系统中独立出来后,有了如下的优势:

  • 授权服务不受业务的影响,如果业务网关宕机了,那至少不会影响代理商网关的业务授权系统的使用;
  • 授权服务一旦建立,一般就很难进行升级,除非特殊情况;
  • 在敏捷开发中,业务系统可能发布频繁(升级更新),这样也不至于影响了授权系统服务导致代理商业务受到影响;

代理商业务独立后,代理商可能会增加秒杀活动,秒杀时支付订单集中在某一时刻翻了十几倍,这时候整个API网关可能扛不住,

如果数据过多,增加几台负载服务器可能也有点吃力,以至于整个业务系统受到影响;

这个时候把支付业务从系统中拆分出成独立的支付网关,并做了一定的负载,这时候系统架构图就演变成如下:

支付业务独立后的优势:

  • 支付网关服务更新不会太频繁,减少整个系统因为发布导致的一系列问题,增强稳定性;
  • 支付系统出现宕机不影响整个系统的使用,用户还可以使用其他操作,技术和运维人员也比较好排查定位问题所在;

授权中心单独一个网关,访问API网关支付业务网关代理商业务网关都需要先通过授权中心获得授权拿到访问令牌AccessToken 才能正常的访问这些网关,

这样授权模块就不会受任何的业务影响,同时各个业务网关也不需要写同样的授权业务的代码;

业务网关仅仅只需关注本身的业务即可,授权中心仅仅只需要关注维护授权;

经过这样升级改造后整个系统维护性得到很大的提高,相关的业务也可以针对具体情况进行选择性的扩容。

参考文献

Asp.Net Core IdentityServer4 中的基本概念:https://www.cnblogs.com/jlion/p/12437441.html

IdentityServer4+Vue+asp.netcore开源项目地址:https://www.cnblogs.com/WQLBlog/p/12356853.html

Asp.Net Core 中IdentityServer4 授权中心之应用实战:https://www.cnblogs.com/jlion/p/12447081.html

基于IdentityServer4 实现.NET Core的认证授权:https://www.cnblogs.com/xiandnc/p/10150814.html

 
欢迎关注订阅微信公众号【熊泽有话说】,更多好玩易学知识等你来取

作者:熊泽-学习中的苦与乐
公众号:熊泽有话说


出处: https://www.cnblogs.com/xiongze520/p/15543795.html



您可以随意转载、摘录,但请在文章内注明作者和原文链接。

一看就懂的IdentityServer4认证授权设计方案的更多相关文章

  1. 基于IdentityServer4 实现.NET Core的认证授权

    IdentityServer4是什么? IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. OpenID ...

  2. .net core gRPC与IdentityServer4集成认证授权

    前言 随着.net core3.0的正式发布,gRPC服务被集成到了VS2019.本文主要演示如何对gRPC的服务进行认证授权. 分析 目前.net core使用最广的认证授权组件是基于OAuth2. ...

  3. 认证授权:IdentityServer4

    前言 上一篇文章<学习OIDC>介绍了OIDC协议,本篇开始我们就来具体来学习OIDC的具体实现IdentityServer4 学习. 一.IdentityServer4 是什么? Ide ...

  4. 一次看懂 Https 证书认证

    TLS 传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为网际网路通信,提供安 ...

  5. 使用Owin中间件搭建OAuth2.0认证授权服务器

    前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...

  6. [2014-11-11]使用Owin中间件搭建OAuth2.0认证授权服务器

    前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...

  7. [认证授权] 5.OIDC(OpenId Connect)身份认证授权(扩展部分)

    在上一篇[认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心部分)中解释了OIDC的核心部分的功能,即OIDC如何提供id token来用于认证.由于OIDC是一个协议族,如果 ...

  8. [认证授权] 5.OIDC(OpenId Connect)身份认证(扩展部分)

    在上一篇[认证授权] 4.OIDC(OpenId Connect)身份认证(核心部分)中解释了OIDC的核心部分的功能,即OIDC如何提供id token来用于认证.由于OIDC是一个协议族,如果只是 ...

  9. 一站式WebAPI与认证授权服务

    保护WEBAPI有哪些方法? 微软官方文档推荐了好几个: Azure Active Directory Azure Active Directory B2C (Azure AD B2C)] Ident ...

随机推荐

  1. 在modal中的datetimepicker插件BUG修复

    前言:因为在模态框用到datetimepicker这一日期控件,而选中日期时,会触发模态框的再次打开,导致上面表单选的值会重新加载 解决办法: 用stopPropagation() 方法阻止事件传播, ...

  2. Python3入门系列之-----json与字典转换

    json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写 JSON 函数 使用 JSON 函数需要导入 json 库:import js ...

  3. mybatis: No enum constant org.apache.ibatis.type.JdbcType."VARCHAR"

    mybatis 插入的时候一句sql报错如下. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ib ...

  4. Javascript设计模式之原型模式、发布订阅模式

    原型模式 原型模式用于在创建对象时,通过共享某个对象原型的属性和方法,从而达到提高性能.降低内存占用.代码复用的效果. 示例一 function Person(name) { this.name = ...

  5. 小米路由器4a千兆版刷openwrt

    现在网上搜小米路由器4a千兆版刷机的都是刷的padavan的,很少能找到openwrt的刷机教程. 首先刷openwrt系统的时候要先刷入引导程序breed,网上有一篇帖子写的很详细(https:// ...

  6. Bootstrap的模态框无法弹出的问题

    今天在使用Bootstrap官网所提供的模态框插件时候发现其中的 可选尺寸模态框 无法弹出 在模态框前使用过其他 Bootstrap的js插件,可以正常使用,说明所需依赖js文件已经正常引用 注意:j ...

  7. 前端从web服务器或者CDN下载资源

    前段时间听到前端同学说前端拿到资源的CDN链接后可以直接从CDN下载资源,不需要经过后端,感觉很神奇,但是一致不明白是怎么实现的,前两天整理了下关于CDN和对象存储的知识,今天搜了下前端直接下载资源的 ...

  8. 数据库InnoDB和MyISAMYSQL的区别

    1.nnoDB支持事务,MyISAM不支持,这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了. 2.MyISAM适合查询以及插入为主 ...

  9. tomcat启动程序报错

    1.问题 23-Apr-2021 10:53:38.897 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.de ...

  10. Elasticsearch 存储成本省 60%,稿定科技干货分享

    背景 稿定科技旗下稿定设计产品是一个聚焦商业设计的多场景在线设计平台,打破了软硬件间的技术限制,汇集创意内容与设计工具于一体,为不同场景下的设计需求提供优质的解决方案,满足图片.视频等全类型媒介的设计 ...