了解以下内容对ASP.NET 5中的验证中间件应用有很大帮助!

  OAUTH2是目前很多大型网站都使用的对外提供开放资源接口的应用标准,比入taobao\alipay\腾讯\豆瓣等。它和目前的另外一种OPENID标准是不同的两个概念,OPENID是提供用户验证的,而OAUTH是提供授权的,是OPENID的一个升级版本,由两个机构负责维护的。OPENID的最新标准OpenID Connect【(Identity, Authentication) + OAuth 2.0 = OpenID Connect】,ASP.NET 5也提供了这种新标准的支持,他在OAUTH2的基础上作了升级,在OAUTH2验证完后多了一个ID_TOKEN,可以获得更多用户信息,同时是以json格式做交互,更适合RESTful风格的app,进而适合任何不同的客户端程序。

  理解OAUTH其实很简单,最重要是弄清楚几个角色名词和它的授权步骤即可,以我们常用的在第三方网站使用QQ账户登陆为例:

资源持有者(User用户或者其他app,好比你在QQ上的账户)在客户端(第三方网站)登陆 ---> 
②资源持有者使用用户名密码登录后,验证服务器(验证客户端的Id和用户名密码),让资源持有者授权客户端统一允许访问的资源范围,例如你的注册资料(authorization grant)等 ---> 
③上一步同意授权和授权范围后,客户端向验证服务器申请资源访问授权令牌access token(这个动作一般在客户端后台执行,所以有时候看不到)---> 
④客户端经验证服务器验证通过发放资源访问授权令牌 ---> 
⑤客户端收到资源访问令牌后向资源服务器(其实就是授权访问能访问的资料,比如获取用户资料的Action,但是要判断下客户端能访问不能访问了)要资源 

上边的步骤中的粗体就是需要了解的四个名词,大概步骤就是以上这个样子。

  OAUTH2中有好几种验证的流程模型,在ASP.NET4.5>中默认的验证模型是密码流程验证模式,这种模式比较简单,复杂缜密的其实类似上边的步骤说明,属于授权码流程模式,感兴趣的自己看下文档。密码流程验证模式如下图:

密码流程验证模式有个弊端,就是用户必须把用户名密码提供给客户端,客户端不能保存密码。这种模式适用客户端是一个项目的程序或者属于你自己一个公司自己开发的程序,客户端必须高度信任。(当然以上验证和授权服务器可以分开也可以一起)

OPENID CONNECT的流程类似以上步骤(参考这里)

+--------+                                   +--------+
| | | |
| |---------(1) AuthN Request-------->| |
| | | |
| | +--------+ | |
| | | | | |
| | | End- |<--(2) AuthN & AuthZ-->| |
| | | User | | |
| RP | | | | OP |
| | +--------+ | |
| | | |
| |<--------(3) AuthN Response--------| |
| | | |
| |---------(4) UserInfo Request----->| |
| | | |
| |<--------(5) UserInfo Response-----| |
| | | |
+--------+ +--------+
(1)PR(客户端)发送请求到OP(OpenId提供者,e.g 验证服务器)
(2)OP验证最终用户并获得授权
(3)OP相应给客户端一个id taoken,通常就是access token
(4)RP携带access token请求到用户信息端(授权资源)
(5)用户信息端返回最终用户的用户声明信息

看起来和OAUTH非常相似,它缺点就是太新了,还很少有应用,Google很早已经应用了该标准。Asp.net5已经有人实现了OPENID CONNECT 的服务器端中间件,还有非常不错的例子,可以参考看下https://github.com/aspnet-security/AspNet.Security.OpenIdConnect.Server

ASP.NET 中OAUTH 2.0 及OPENID CONNECT的介绍的更多相关文章

  1. 使用 IdentityServer4 实现 OAuth 2.0 与 OpenID Connect 服务

    IdentityServer4 是 ASP.NET Core 的一个包含 OIDC 和 OAuth 2.0 协议的框架.最近的关注点在 ABP 上,默认 ABP 也集成 IdentityServer4 ...

  2. 微服务系列之授权认证(一) OAuth 2.0 和 OpenID Connect

    1.传统架构的授权认证 传统应用架构,用户使用账号密码登录后,可以使用前端cookie存储登录状态,也可以使用后端session方式存储登录状态,小应用这么做其实很高效实用,当应用需要横向扩展时,就需 ...

  3. ASP.NET没有魔法——ASP.NET OAuth、jwt、OpenID Connect

    上一篇文章介绍了OAuth2.0以及如何使用.Net来实现基于OAuth的身份验证,本文是对上一篇文章的补充,主要是介绍OAuth与Jwt以及OpenID Connect之间的关系与区别. 本文主要内 ...

  4. ASP.NET OAuth、jwt、OpenID Connect

    ASP.NET OAuth.jwt.OpenID Connect 上一篇文章介绍了OAuth2.0以及如何使用.Net来实现基于OAuth的身份验证,本文是对上一篇文章的补充,主要是介绍OAuth与J ...

  5. asp.net core系列 56 IS4使用OpenID Connect添加用户认证

    一.概述 在前二篇中讲到了客户端授权的二种方式: GrantTypes.ClientCredentials凭据授权和GrantTypes.ResourceOwnerPassword密码授权,都是OAu ...

  6. PHP下的Oauth2.0尝试 - OpenID Connect

    OpenID Connect OpenID Connect简介 OpenID Connect是基于OAuth 2.0规范族的可互操作的身份验证协议.它使用简单的REST / JSON消息流来实现,和之 ...

  7. 在ASP.NET中实现OAuth2.0(一)之了解OAuth

    1.什么是OAuth2.0 是一个开放授权标准,允许用户让第三方应用访问该用户在某一个网站或平台上的私密资源(如照片.视频.联系人等),而无须将用户名和密码提供给第三方应用 2.OAuth2.0授权模 ...

  8. 在ASP.NET中实现OAuth2.0(二)之打造自己的API安全策略

    1.场景介绍 公司开发了一款APP产品,前期提供的api接口都是裸奔状态 举个例子:想要获取某一个用户的数据,只需要传递该用户的ID就可以拿走数据(说多了都是泪) 现在想给这些接口穿个衣服,加个壳(对 ...

  9. Identity Server 4 预备知识 -- OpenID Connect 简介

    我之前的文章简单的介绍了OAuth 2.0 (在这里: https://www.cnblogs.com/cgzl/p/9221488.html), 还不是很全. 这篇文章我要介绍一下 OpenID C ...

随机推荐

  1. Discuz 哪些文件和文件夹需要777权限

    Discuz有强大的缓存能力,当然要想建立这些缓存,就需要对需要的文件和文件夹进行读写,因此给需要的文件和文件夹777权限(Linux服务器)是必不可少的,下面就列出了需要给777权限的文件和文件夹, ...

  2. php数组去重实例及分析

    php数组去重实例及分析.  一维数组的重复项: 使用array_unique函数即可,使用实例 <?php    $aa=array("apple","banan ...

  3. 用python实现了一下:甲乙两人互猜数字(数理逻辑)

    今天在园子里看到博客:超难面试题:甲乙两人互猜数字(数理逻辑).然后琢磨了半天,写了个Python程序实现算法,我得出来的结果是1,6或1,8或35,42的组合, 不知道是否正确,请高人指点? 下面列 ...

  4. Natural Language Processing with Python - Chapter 0

    一年之前,我做梦也想不到会来这里写技术总结.误打误撞来到了上海西南某高校,成为了文科专业的工科男,现在每天除了膜ha,就是恶补CS.导师是做计算语言学的,所以当务之急就是先自学计算机自然语言处理,打好 ...

  5. 转几篇WPF文章

    How to view word document in WPF application (CSVSTOViewWordInWPF) WPF 浏览PDF 文件 如何保存RichTextBox的文本到数 ...

  6. Flasback数据库(闪回数据库)

    数据库闪回原理: 一旦启用了闪回数据库,修改的块映像会不时从数据库缓冲区复制到闪回缓冲区.通过新的后台恢复写入器(Recovery Writer, RVWR)将此闪回缓冲区内容刷新到磁盘和闪回日志接着 ...

  7. DataGrid中取HyperLinkColumn列的值,处理DataGrid中绑定的特殊字符

    DataGrid中取HyperLinkColumn列的值. /// <summary> /// 对datagrid中标签进行编码,处理特殊字符 /// </summary> / ...

  8. 类的本质、description方法、SEL、NSLog输出增强

    一.类的本质 1.类也是个对象 其实类也是一个对象,是Class类型的对象,简称“类对象” Class类型的定义 typedef struct objc_class *Class; 类名就代表着类对象 ...

  9. android锁屏和finish()后activity生命周期的变化

    之前写了一个一键锁屏软件,有个朋友用了后发现了问题,所以昨天研究了一个activity在锁屏后的生命周期变化.如下: 锁屏分为两个步骤,先是锁定屏幕,再是黑屏 onCreate(在该方法里锁屏)--- ...

  10. 演示demo开发问题及解决方案集锦

    模型处理问题: 1. 3Dmax模型导入Unity单位设置: 自定义->单位设置->系统单位设置与显示单位比例都调成厘米 2. 3Dmax中材质贴图: 点击材质编辑器[在模式下可以选择精简 ...