Identity Server4学习系列一

1、前言html

今天开始学习Identity Server4,顺便了解下.Net Core,以便于完善技术栈,最主要的是要跟上.Net的发展潮流,顺便帮助各位整理下官方文档,加上一些我本身对他的理解.api

这是官方文档的地址浏览器

2、简介安全

一、常见的网站的交互方式以下:服务器

(1)、浏览器与Web应用程序交互。单站点应用程序,一个站点搞定全部的东西,常见的有MVC、WebForm等等,这类通常不存在多客户端之说,由于页面和后台处理程序是强耦合的,也就是说,这个时候咱们的后台处理程序只处理对应的页面,不能给其它的诸如IOS、Android等等设备调用,因此没有安全一说.负载均衡

(2)、Web应用程序(多是本地的,也多是远程的)与WebAPI通讯(有时是本身的,有时表明用户)。多站点应用程序,这个时候咱们经过对业务的聚合提供一套完整的Web API给外界调用,调用者能够是多种设备,好比IOS、Andriod、H5站点等.这个时候就有安全一说,由于这个时候若是你的API公开,不作任何的安全措施,意味着全部知道你接口的应用程序都能调用.这个时候你必须考虑安全问题分布式

(3)、WebApi与WebApi之间的调用,通常用于规模较大的网站,由于当一个站点达到必定规模,势必要对业务进行拆分,将不一样的业务经过WebApi部署到不一样的站点上,而后各个站点之间进行通讯,若是有必要能够进行分布式部署,用Nginx进行负载均衡.这个时候,也必须考虑站点的安全性,由于不能让你的核心业务信任外界任何的调用.ide

 

因此,WebApi上的资源安全对咱们来讲是很是重要的问题,必须保证我门的API受咱们的保护,只有通过咱们的认证以后,才能进行安全的访问.一般,通常性的解决方法是,首先用户(能够是客户端用户、能够是服务端用户)经过了咱们的认证系统,而后咱们经过受权的方式,把这个资格开发给它.好比说编写博客这个事情,只有注册了并登录博客园,才会有这个资格,若是没有注册,那么只能访问博客园的公共资源.当让这个例子不是很确切.学习

 

二、关于认证优化

(1)、简单的认证方式

常见的简单的认证方式通常就是设计一个注册登录系统,接着给咱们的Api接口继承一个基类,基类里面有判断用户是否登录的操做,这样就确保了咱们的Api只有注册并登录了咱们的系统的用户才能访问。可是Api与Api之间的访问总不能也这么设计吧?固然你能够给每一个接口约定用户名和密码两个参数,而后给API的调用者分配一个帐号密码,让Api在咱们控制范围内的接受调用,可是没人会去这么干,并且会存在安全隐患,好比抓包等等,并且系统这么设计也不够优雅,固然你能够说用Https加密,可是这不是本文的重点.

(2)、认证协议

关于为何要用认证协议请参考Web应用的认证机制常见的认证协议有SAML2p、WS-Federation和OpenIDConnect-SAML2p,它们是最流行和部署最普遍的。

(3)、OAuth 2.0认证

OAuth2是一种协议,容许应用程序从安全令牌服务请求访问令牌,并使用它们与API通讯。此委托下降了客户端应用程序和api的复杂性.

(4)、OpenID Connect

OpenIDConnect和OAuth2.0很是类似-实际上OpenIDConnect是OAuth2.0之上的一个扩展。两个基本的安全问题,即身份验证和API访问,被组合成一个单一的协议-一般是安全令牌服务进行一次往返。咱们认为,OpenIDConnect和OAuth2.0的结合是在可预见的未来保护现代应用程序的最佳方法。Identity yServer 4是这两种协议的实现,而且通过高度优化以解决移动、本地和Web应用程序的典型安全问题。

 

三、Identity Server4

(1)、简介

Identity Server4是一种中间件,它将符合规范的OpenIDConnect和OAuth2.0端点添加到任意ASP.NETCore应用程序中。也就是说你的移动端、本地应用程序只要符合OpenIDConnect和OAuth2.0协议,且你的ASP.NETCore应用程序也符合,那么他们之间就能进行交互.

(2)、实现认证的方式

 

MS提供的图,下面简要介绍下:

Users:用户

使用注册客户端而且想要访问资源的人

 

Client:客户端

客户端是一种软件,它从Identity Server请求令牌,令牌两种第一种请求身份令牌一验证用户身份的标识令牌(下面会介绍)、另外一种是访问令牌(下面会介绍)一要求访问资源的令牌。客户端在请求令牌以前必须先在Identity Server注册。客户端的示例包括Web应用程序、本地移动或桌面应用程序、服务器进程等。

 

Resources:资源

资源是你但愿使用Identity保护的资源,通常有两种:一是用户数据、二是Api资源

 

Identity Data:Identity数据

关于用户的身份数据标识信息,例如姓名或电子邮件地址等用户信息.

 

Identity Token:验证用户身份的标识令牌

标识令牌表示身份验证过程的结果。它至少包含一个用户标识符(称为Subaka Subject Claimation)和关于用户身份验证的方式和时间的信息。它能够包含其余身份数据。

 

Access Token:访问令牌

访问令牌容许访问API资源。客户端请求访问令牌并将它们转发给API。访问令牌包含有关客户端和用户的信息(若是存在的话)。API使用该信息来受权对其数据的访问。

 

那么大体的流程就是这样,首先用户使用客户端,接着客户端注册了Identity,并向Identity申请令牌,接着Identity就开始验证用户信息,经过将用户的信息存储到Identity Data里面,接着经过OpenIDConnect协议与客户端进行对话(向请求头中添加一些必要信息,并进行数据加密等操做),发放Identity Token,若是用户须要访问Api资源,那么去申请Access Token,经过将你的访问令牌(并遵循通OAuth2.0协议,向请求中添加一些必要信息,并进行数据加加密等操做))的同时将你的令牌转发给Api,经过那么就能够正常访问Api。

 

四、Identity Server4能干的事

固然Indentity能干的事不仅是在遵循安全协议的状况下,发送安全令牌这么简单(固然也不简单!).

它还能有效的保护您的资源,并提供会话管理和单点登陆管理等等.

相关文章
相关标签/搜索