Skip to main content

Identity Server4架构介绍

分类:  IdentityServer4教程 标签:  #Asp.Net core基础 #认证 #授权 #Identity Server #OpenId Connect #OAuth2 发布于: 2023-05-27 22:29:19

目前大多数现代的应用程序架构图如下
(借用IdentityServer4官网的图解释一下)


一般的交互过程可以通过如下的列表进行描述

  • 用户浏览器和web应用进行交互。
  • Web应用和Web API进行交互。
  • 基于浏览器的应用和Web API进行交互(例如:SPAs应用)
  • 本地桌面应用和Web API进行交互
  • f服务端的应用和web api进行交互。
  • Web API之间的交互。

这个架构是非常典型的例子,每一层都需要保护的资源,都需要实现认证和授权,而且最大的问题是他们的用户有可能都存放在不同的地方,有不同的权限。

为了解决这个问题目前最佳的做法是将各层对于认证和授权的需求独立出来,例如使用我们以前讲过的Token Service,从而可以解决各层之间交互的认证和授权需求。

根据我们上述的思想调整一下,也就是使用Token Service来适配各层需要的认证和授权需求,请参考如下的图(借用IdentityServer4的官网图)


从该图可以看出我们已经将整个安全的考量分成了两个部分:

认证

认证的意义在于每个应用需要知道访问自己的资源的用户标识,从而通过用户标识增加业务逻辑,从而能够对某个用户能够访问到的资源进行限定,最常见的例子就是Web 应用,同时一些本地应用(例如Desktop应用)或者JS应用也都需要认证的。

目前最常见的认证协议是SAML2p, WS-Federation和Open Id Connect, SAML2p目前是部署和应用最广的一个协议。

但是近年来由于互联网的发展,Open Id Connect也应用越来越广了。Open Id Connect协议主要优势就是特别针对API类应用进行设计的。

API Access

应用访问API主要有两个途径:一个是使用应用自己的标识,一个是委托用户的标识来使用API, 有的应用场景也同时需要这二者。

OAuth2是大家提到的最大的一个协议,该协议主要的作用是允许应用从安全中心取得一个Access Token 然后使用该token和API进行交互,这个设计大大降低了客户端应用和服务端应用的复杂性,如果您不是很了解OAuth2您也可以翻看一下我之前的文章。

OpenID Connect 和 OAuth2.0

OpenID Connect和OAuth2.0 从技术的角度来说很多是类似的,从历史上来说,OpenID Connect是从OAuth2.0 发展起来的,不过这二者的目的并不一致,OAuth2.0主要是完成授权的场景,但是OpenID Connect主要的场景还是认证。通过这些的发展以及应用,我们认为组合OpenId Connect和OAuth 2.0目前是行业中针对于现代的应用较好的解决方案。

IdentityServer4的作用

IdentityServer4是转为ASP.net Core应用设计的一个中间件,它实现了OpenId Connect和OAuth2.0协议,为ASP.net Core应用提供一站式的认证和授权解决方案。

通常情况您的应用已经包含了登录和注销的接口或者页面,IdentityServer中间件添加必要的协议,然后其他的客户端应用就可以使用这些协议和您的认证或者授权层进行交互了,IdentityServer4使用的是业界的标准。如下图:


需要提醒的是您的应用可能非常复杂,根据的需求可能会越来越复杂,但是推荐保证认证和授权这一层尽量简单,包括UI的部分也尽量简单,并且独立。