ASP NET MVC使用Oauth2 0实现身份验证

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   
                                                                                                   

 随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构)、服务器与多种客户端的(如PC、移动、Web等),甚至还有需要以服务的形式开放给第三方的,身份验证这一功能已经演化为一个服务,很多大型应用中都有自己的身份验证服务器甚至集群,所以普通的身份验证方式已经不能满足需求。

  在.Net领域中也有一些开源的身份验证服务器组件,如IdentityServer(http://identityserver.io/),但是这些组件对于一些规模较小的项目来说可能会感觉到比较庞大,增加了学习和维护成本,所以本章将对OAuth以及如何使用OAuth实现身份验证模式进行介绍。
  本章的主要内容有:

  ● OAuth2.0简介
   ● 在.Net中使用OAuth实现基于授权码模式的身份验证
   ● 实现基于Access Token的身份验证
   ● 加入Refresh Token支持
   ● 实现通过用户密码模式获取Access Token
   ● 实现客户端模式获取Access Token
   ● 关于.Net中OAuth相关令牌的加密说明

  注:本章内容源码下载:https://files.cnblogs.com/files/selimsong/OAuth2Demo.zip

OAuth2.0简介

  在文章的开始的时候说过现代软件应用的身份验证场景越来越丰富,下图是现代应用程序的一个通信图,它描述了常见的“客户端”是如何与服务器提供的服务通信的。

  640?wx_fmt=png&wxfrom=5&wx_lazy=1

  该图出自IdentityServer:https://identityserver4.readthedocs.io/en/release/intro/big_picture.html
  为了满足这些场景人们制定了一套标准协议,这个协议就是OAuth(Open Authorization,开放授权)协议,OAuth能够让第三方应用程序去访问受限制的HTTP服务。OAuth有两个版本分别是1.0和2.0,但是由于1.0版本过于复杂所以1.0版本被2.0版本替换了,并且两个版本是不兼容的。
  接下来就对OAuth2.0相关的概念进行介绍:

1. OAuth2.0中的角色

  ● Resource Owner:资源拥有者,就是能够访问被限制资源的用户(注:这里的用户是个泛指,它既可以是真实用户也可以是服务程序)。
   ● Resource Server:资源宿主,能够接受和处理,使用访问令牌(access token)访问受保护资源的请求(如提供API的服务器)。
   ● Client:它泛指所有的第三方程序(无论是Web应用、桌面应用还是服务端应用),它通过资源拥有者以及它的授权来访问受保护的资源。
   ● Authorization Server:用来对授权成功的客户端发布令牌以及对令牌的验证授权。并对Client进行管理。

2.OAuth2.0的协议流程

  0?wx_fmt=png

  A. 第三方程序向资源拥有者(用户)发送授权请求,这个过程既可以通过客户端直接向用户请求,也可以通过授权服务器作为中介来完成请求。(注:对于授权请求这个概念相当于用户登录,应用程序可以直接显示一个登录页面,也可以跳转到验证服务器的统一登录页面)
  B. 用户将授权相关信息“提交”给第三方程序,在OAuth中有4种不同的权限授予方式,每种方式需要的数据不同,如基于用户密码的授权方式就需要用户名和密码。
  C. 第三方程序将用户的授权信息提交到授权服务器,请求一个Access Token。
  D. 授权服务器验证完成用户的授权信息后,将Access Token发放到第三方程序。
  E. 第三方程序携带Access Token访问被保护的资源。
  F. 资源服务器验证Access Token有效后,将资源返回到第三方程序。

3. OAuth中的授权模式(即获取Access Token的方式)

  ● Authorization Code(授权码模式):该模式的核心是客户端通过一个授权码来向授权服务器申请Access Token。是一种基于重定向的授权模式,授权服务器作为用户和第三方应用(Client)的中介,当用户访问第三方应用是,第三方应用跳转到授权服务器引导用户完成身份验证,生成Authorization Code并转交到第三方应用,以便于第三方应用根据这个授权码完成后续的Access Token获取。
   ● Implicit(简化模式):简化模式是一种简化的授权码模式,授权码模式在首次访问第三方应用时跳转到授权服务器进行身份验证返回授权码,而简化模式在跳转到授权服务器后直接返回Access Token,这种模式减少了获取Access Token的请求次数。
   ● Resource Owner Password Credentials(用户密码模式):通过资源拥有者(用户)的用户名和密码来直接获取Access Token的一种方法,这种方法要求第三方应用(Client)是高度可信任的,并且其它授权方式不可用的情况下使用。
   ● Clien

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值