一、前言

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

这是官方文档的地址

二、简介

1、常见的网站的交互方式如下:

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

(2)、Web应用程序(可能是本地的,也可能是远程的)与WebAPI通信(有时是自己的,有时代表用户)。多站点应用程序,这个时候我们通过对业务的聚合提供一套完整的Web API给外界调用,调用者可以是多种设备,比如IOS、Andriod、H5站点等.这个时候就有安全一说,因为这个时候如果你的API公开,不做任何的安全措施,意味着所有知道你接口的应用程序都能调用.这个时候你必须考虑安全问题

(3)、WebApi与WebApi之间的调用,一般用于规模较大的网站,因为当一个站点达到一定规模,势必要对业务进行拆分,将不同的业务通过WebApi部署到不同的站点上,然后各个站点之间进行通信,如果有必要可以进行分布式部署,用Nginx进行负载均衡.这个时候,也必须考虑站点的安全性,因为不能让你的核心业务信任外界任何的调用.

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

2、关于认证

(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应用程序的典型安全问题。

3、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。

4、Identity Server4能干的事

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

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

Identity Server4学习系列一的更多相关文章

  1. Identity Server4学习系列四之用户名密码获得访问令牌

    1.简介 Identity Server4支持用户名密码模式,允许调用客户端使用用户名密码来获得访问Api资源(遵循Auth 2.0协议)的Access Token,MS可能考虑兼容老的系统,实现了这 ...

  2. Identity Server4学习系列三

    1.简介 在Identity Server4学习系列一和Identity Server4学习系列二之令牌(Token)的概念的基础上,了解了Identity Server4的由来,以及令牌的相关知识, ...

  3. Identity Server4学习系列二之令牌(Token)的概念

    1.简介 通过前文知道了Identity Server4的基本用途,现在必须了解一些实现它的基本细节. 2.关于服务端生成Token令牌 头部(Header): { “typ”: “JWT”, //t ...

  4. EntityFramework Core 学习系列(一)Creating Model

    EntityFramework Core 学习系列(一)Creating Model Getting Started 使用Command Line 来添加 Package  dotnet add pa ...

  5. [eShopOnContainers 学习系列] - 02 - vs 2017 开发环境配置

    [eShopOnContainers 学习系列] - 02 - vs 2017 开发环境配置 https://github.com/dotnet-architecture/eShopOnContain ...

  6. Python学习系列(二)(基础知识)

    Python基础语法 Python学习系列(一)(基础入门) 对于任何一门语言的学习,学语法是最枯燥无味的,但又不得不学,基础概念较繁琐,本文将不多涉及概念解释,用例子进行相关解析,适当与C语言对比, ...

  7. SQL Sever 学习系列之一

    SQL Sever 学习系列之一 本学习系列,从实际工作需要中积累,对于一个新手而言,写出几条漂亮的查询语句,应该是可以受启发的. 一.问题的需求是:员工薪酬发放,现有资金能发放多少人,哪些人应得? ...

  8. 【SQL Server 学习系列】-- sql 随机生成中文名字

    原文:[SQL Server 学习系列]-- sql 随机生成中文名字 ,) )) -- 姓氏 ,) )) -- 名字 INSERT @fName VALUES ('赵'),('钱'),('孙'),( ...

  9. identity server4获取token和userInfo

    一.简介 IdentityServer4(ids4)是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架.在许多成熟的.net core框架中都完美的集成的该身份服务框 ...

随机推荐

  1. IE 8 浏览器 F12 调试功能无法使用

      “按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的缩略图上,右键-最大化,工具就全 ...

  2. 第10章:MongoDB-CRUD操作--文档--修改--修改器

    ① $set:进行内容的重新设置 语法:{"$set" : {"成员" : "新内容"}}: 范例:将年龄是20岁的人的成绩修改为89 db ...

  3. thinkphp3.2.3 数据库增删改查

    版本3.23 1. 多表查找一条数据 M('a表')->join("b表 on b表.id=a表.id")->where('条件')->find(); 2.查找一 ...

  4. 【慕课网实战】Spark Streaming实时流处理项目实战笔记七之铭文升级版

    铭文一级: 第五章:实战环境搭建 Spark源码编译命令:./dev/make-distribution.sh \--name 2.6.0-cdh5.7.0 \--tgz \-Pyarn -Phado ...

  5. spring 事务的传播特性

    1.声明式事物中,一个类serviceA的方法test1()调用另一个类serviceB的方法test2() 要是serviceB的test2()事务配置在xml文件中为REQUIRED,又在此方法上 ...

  6. oracle 监听文件 说明

    MAR:电脑笔记 不做整理 .. ORACLE_SID=orcl2 instance_name=sicca 静态注册文件中SID_NAME=ORACLE_SID 动态注册的时候是用的instance_ ...

  7. windows下解决numpy, scipy等库安装失败的方法

    如果pip安装scipy库失败,可以参考以下方法: scipy官方上提供了这样的方法: Windows packages Windows does not have any package manag ...

  8. (转)FIKKER和Nginx的反向代理服务功能对比评测报告

    转自:http://tieba.baidu.com/p/1268737304 针对高并发反向代理服务器 NGINX和FIKKER评测报告 测试硬件环境:服务端:CPU:E5200硬盘:SATA 133 ...

  9. Codeforces822 C. Hacker, pack your bags!

    C. Hacker, pack your bags! time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  10. lca tarjin

    这个算法  我个人认为是  遍历每一个点把它当成一些询问的最近祖先 1 2 3 4 5 6 low是并差集,vis是是否访问过,访问过为true,没有为false: 假设询问是(4,4),(4,5), ...