IdentityServer4-介绍

1、整体介绍前端

大多数现代应用或多或少是这样的:git

一般,每一个层(前端、中间层和后端)都必须保护资源并实现身份验证和/或受权——一般针对相同的用户存储。github

将这些基本的安全功能外包给安全令牌服务,能够防止在这些应用程序和端点之间重复这些功能。 web

重组应用程序以支持安全令牌服务将致使如下架构和协议:后端

这种设计将安全问题分为两部分:api

身份认证安全

当应用程序须要知道当前用户的身份时,须要进行身份验证。一般,这些应用程序表明该用户管理数据,并须要确保该用户只能访问容许他访问的数据。最多见的例子是(经典)Web应用程序 - 但原生和基于JS的应用程序也须要身份验证。服务器

最多见的身份验证协议是SAML2p、WS-Federation和OpenID Connect——SAML2p是最受欢迎的和最普遍部署的。架构

OpenID Connect是这三种类型中最新的一种,但被认为是将来的,由于它最有可能应用于现代应用。它从一开始就为移动应用程序场景构建,设计为API友好。 ide

API访问

应用程序有两种与API进行通讯的基本方式 - 使用应用程序标识或发放用户身份。 有时两种方法须要结合。

OAuth2是一种协议,容许应用程序从安全令牌服务请求访问令牌,并使用它们与api通讯。这种受权下降了客户端应用程序和API的复杂性,由于能够集中验证和受权。 

OpenID链接和OAuth 2.0 -更好地结合在一块儿

OpenID链接和OAuth 2.0很是类似——事实上,OpenID链接是OAuth 2.0之上的扩展。身份认证和API访问这两个基本的安全问题被合并为一个协议 - 每每只需一次往返安全令牌服务。

咱们认为,OpenID Connect和OAuth 2.0的结合是在可预见的将来保护现代应用程序的最佳方法。IdentityServer4是这两个协议的一个实现,它高度优化以解决当今移动、本地和web应用程序的典型安全问题。

IdentityServer4如何提供帮助

IdentityServer是一种中间件,可将符合规范的OpenID Connect和OAuth 2.0端点添加到任意的ASP.NET Core应用程序中。

一般状况下,您构建(或从新使用)包含登陆和注销页面的应用程序(也可能取决于您的须要),IdentityServer中间件会添加必要的协议头,以便客户端应用程序可使用这些标准协议与它进行对话。

托管应用程序能够像您想的那样复杂,但咱们一般建议经过仅包含与身份验证相关的用户界面来尽量缩小攻击面。

 

2、术语

IdentityServer

IdentityServer是一个OpenID链接提供程序——它实现了OpenID链接和OAuth 2.0协议。

不一样的文献对相同的角色使用不一样的术语——您可能还会发现安全令牌服务、身份提供程序、受权服务器、IP-STS等等。

但他们简而言之就是:一种向客户发放安全令牌的软件。

IdentityServer有许多任务和特性——包括: 

  • 保护你的资源
  • 使用本地账户存储或经过外部标识提供程序对用户进行身份验证
  • 提供会话管理和单点登陆
  • 管理和认证的客户端
  • 向客户端发出标识和访问令牌
  • 验证令牌

User 

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

Client

客户端是一种软件,它从IdentityServer请求令牌——用于验证用户(请求身份令牌)或访问资源(请求访问令牌)。客户端必须首先在IdentityServer上注册,而后才能请求令牌。

客户端的示例包括web应用程序、本地移动或桌面应用程序、SPAs、服务器进程等。

Resources

资源是您但愿使用IdentityServer(用户的标识数据或api)保护的内容。

每一个资源都有一个惟一的名称——客户端使用这个名称来指定他们想要访问的资源。

关于用户的身份数据标识信息(又名claims),例如姓名或电子邮件地址。

api资源表示客户机但愿调用的功能——一般建模为Web api,但不必定。

Identity Token

标识符表示身份验证过程的结果。它至少包含用户的标识符(称为sub - 又名 subject claim)和用户如何以及什么时候认证的信息。它能够包含其余标识数据。

Access Token

访问令牌容许访问API资源。客户端请求访问令牌并将它们转发到API。访问令牌包含关于客户端和用户的信息(若是存在)。api使用这些信息受权访问它们的数据。

 

3、包和建立

IdentityServer 由许多nuget包组成。

IdentityServer4

nuget | github

包含核心IdentityServer对象模型,服务和中间件。 只包含对内存配置和用户存储的支持 - 可是您能够经过配置为其余存储提供插件支持。 这就是其余repos和包的内容。

Quickstart UI

github

包含一个简单的starter UI,包括登陆、注销和赞成页面。

Access token validation handler

nuget | github

ASP.NET核心身份验证处理程序,用于在api中验证令牌。处理程序容许在相同的API中同时支持JWT和引用令牌。

ASP.NET Core Identity

nuget | github

用于IdentityServer的ASP.NET Core Identity集成包。 该软件包提供了一个简单的配置API来为您的IdentityServer用户使用ASP.NET身份管理库。

EntityFramework Core

nuget | github

EntityFramework用于IdentityServer的核心存储实现。这个包为IdentityServer中的配置和操做存储提供了EntityFramework实现。

 

4、演示服务和测试

https://demo.identityserver.io/

您可使用您最喜欢的客户端库尝试IdentityServer4。咱们在demo.identityserver.io中有一个测试实例。在主页上,您能够找到关于如何配置您的客户端以及如何调用API的说明。

https://github.com/IdentityServer/CrossVersionIntegrationTests/tree/master/src

此外,咱们还有一个能够执行各类IdentityServer和Web API组合(IdentityServer 3和4,ASP.NET Core和Katana)的repo。 咱们使用这个测试工具来确保全部的排列工做。 你能够经过克隆这个回购测试你本身。