OAuth2.0 原理简介

写在前面:

在正式介绍OAuth2.0之前我们先来看一个场景:小李是一个文艺小青年, 经常喜欢出去旅游并且把自己旅行中的美景照片分享到各大社交网站上,比如朋友圈,新浪微博。小李马上要向女朋友求婚了,他想把这三年来和自己女朋友出去旅游的照片打印出来做成照片墙,好在求婚的时候讲女友感动的一塌糊涂,然后你懂得...,那么问题来了,按照小李带女朋友一个月出去玩一次,每次分享30张照片,三年就是30 * 12 * 3 = 1080 张,小李现在想把这1080张照片全部打印出来他首先得找个提供打印照片服务的公司(美图快印),然后把需要打印的照片给到服务公司然后才能打印。怎么把这些照片给到美图快印呢,一般来说有下面两种方式:

1.小李到自己的微博相册中吭哧吭哧下载他需要打印的所有照片,然后装到U盘里或者转储到网盘里,再给到美图快印(那可是1080张照片啊,纯手工操作,好累啊)

2.小李到美图快印告诉工作人员自己的账户名和密码,并告诉他那些需要打印,那些不需要打印,然后小李还会担心:自己和女友的亲密照被工作人员看到了怎么办(更可怕的是某一天自己会不会出现在某论坛上成为网红)?万一他记住了我的密码然后悄悄的登陆上去把我的密码改了怎么办?。。。。

小李觉得有点头疼了,有没有什么方法客户既不告诉工作人员自己的账号和密码又能够方便快捷的把照片给到美图快印呢?

这就要说到我们今天的正题了,用OAuth就可以轻松的解决此类特定范围的授权问题。

OAuth2.0简介:  

OAuth2.0 是一个开放的工业标准的授权协议,它允许用户授权让第三方应用直接访问用户在某一个服务中的特定资源,但是不提供给第三方账号及密码信息。完整定义请移步官网:https://oauth.net/2/

OAuth2.0的基本概念

在了解OAuth2.0之前我们有必要先介绍一下下面几个基本的概念:

1. 资源所有者(Resource Owner):一个能够访问受保护资源的实体。当资源所有者是一个人时,它被称为终端用户。(小李)

2. 资源服务器(Resource Server):托管受保护资源的服务器,能够使用访问令牌接受和响应受保护的资源请求。(新浪微博)

3. 客户端(Client):代表资源所有者和其授权的应用程序来保护资源请求。术语客户端并不意味着任何特定的实现特征(例如,应用程序是否在服务器、桌面或其他设备上执行)(美图快印)

4. 授权服务器(Authorization Server):在成功验证资源所有者并获得授权之后,服务器向客户端发出访问令牌。(授权服务器是用来管理Resource Owner,Resource Server,Client的中间人)

Authorization Server和Resource Server可以使独立的服务提供商,也可以是在一起的,比如上面例子中新浪微博既作授权服务器也用来存储用户的图片资源,OAuth2解决的问题是:通过Authorization Server可以提供一个访问的凭据(token)给client(美图快印的工作人员),使得client可以在不知道Resource Owner以及Resource Server的用户名和密码的情况下访问到Resource Owner受保护的资源,它是一个完美的中间人。  

OAuth2.0详解

通常 Resource server本身就提供Authorization server服务,它主要提供两类接口:

  1. 授权服务接口:接受Client的授权请求,并引导用户到Resource server完成登陆授权的过程。
  2. 获取访问令牌的接口:使用授权接口提供的许可凭据来颁发Resource owner的访问令牌给Client,或由Client更新过期的访问令牌。

除此之外还需要提供一个第三方应用程序注册管理的服务。通常情况下会为注册完成的第三方应用程序分配两个成对出现的重要参数:

  1. client_id:第三方应用程序的一个标识id,这个信息通常是公开的信息,用来区分哪一个第三方应用程序。
  2. client_secret:第三方应用程序的私钥信息,这个信息是私密的信息,不允许在OAuth2流程中传递的,用于安全方面的检测和加密。

Client在取得client_id和client_secret之后再向Authorization Server发起授权请求,并获取AccessToken,然后携带Token来访问和消费受保护的资源。美图快印要想直接获取小李新浪微博相册中的照片资源就需要先引导小李到新浪的登陆界面,然后完成授权登陆,然后再向授权服务器发起授权请求,然后获取到新浪微博办法给他的token,再携带者token才能访问到微博的相册。

下面我们来看一下OAuth2.0的详细授权过程:

我们可以看到在上述的授权过程中最关键的部分是获取token的那一步,这也是OAuth2.0的核心。有了这个token我们就可以访问到resource server上的资源,ABCD这几步都是为了获取这个token。

那么这个token到底包含了哪些信息呢?我们来从头分析一下,我们需要实现的是:让美图快印能够在不用小李用户名和密码的前提下访问到小李新浪微博账户相册中的特定图片。

注意上面加粗的部分,要实现这样的需求我们需要从token中解析出来下面3类信息:

  1. 客户端标识,表明是谁在请求访问资源(美图快印);
  2. 用户标识,得到了谁的许可(小李);
  3. 客户端能访问资源所有者的哪些资源以及其相应的权限。

有了上面的这些信息,那么资源服务器(Resouce Server)就可以区分出来是哪个第三方应用(Client)要访问哪个用户(Resource Owner)的哪些资源(以及有没有权限)

在上面的流程中出现了授权许可(Authorization Grant)这个概念,那到底它是什么意思呢?

书面解释是:授权许可是一个代表资源所有者授权(访问受保护资源)的凭据,客户端用它来获取访问令牌。

这个解释比较抽象,那么我们来翻译一下就是:授权许可是小李授予美图快印获得新浪微博相册的访问令牌的一个凭据。

那么我们该如何获得这个凭据呐,OAuth2定义了四种许可类型:

  1. Authorization Code:授权码;
  2. Implicit:隐式许可;
  3. Resource Owner Password Credentials:资源所有者密码凭据;
  4. Client Credentials :客户端凭据。

具体每一种许可类型到底怎么实现我们将放到后面详细讨论,本文不做详细解释。

写到最后:

总结:OAuth2.0是一套工业级的标准授权协议,可以很方便的解决第三方服务的授权而不需要资源所有者直接提供身份信息,它大大降低了我们在实现认证和授权时的复杂度。目前基于OAuth2.0实现的框架有很多,基于.NET Core实现最好的是IdentityServer4

在后续文章中我们将一起探讨IdentityServer4在.NET Core中的使用,欢迎持续关注。

如果你觉得本文写得不错,麻烦给个赞呗~~~

参考资料:

https://oauth.net/2/

原文地址:https://www.cnblogs.com/xiandnc/p/9763121.html

时间: 2024-08-28 02:18:27

OAuth2.0 原理简介的相关文章

OAuth2.0 的简介

 一.基础知识 1.OAuth产生背景 很多网站.APP 弱化甚至没有搭建自己的账号体系,而是直接使用社会化登录的方式,这样不仅免去了用户注册账号的麻烦.还可以获取用户的好友关系来增强自身的社交功能. 比如我们可以使用微博登录简书,简书会自动将你的微博头像设置为你的简书头像,将你的微博昵称设置为你的简书昵称,甚至还可以获取你微博中的好友列表,提示你哪些朋友已经在使用简书,这是如何做到的呢? 最传统的办法是让用户直接在简书的登录页面输微博的账号和密码,简书通过用户的账号和密码去微博那里获取用户数据

OAuth2.0 授权许可 之 Authorization Code

写在前面: 在前一篇博客<OAuth2.0 原理简介>中我们已经了解了OAuth2.0的原理以及它是如何工作的,那么本篇我们将来聊一聊OAuth的一种授权许可方式:授权码(Authorization Code) 什么是Authorization Code ? 简单来说授权码就是的在第三方应用程序请求Authrization Server来获取AccessToken之前的预先校验,增加了获取token的安全性.比如你吭哧吭哧写了一天的代码,急于回家吃上一口媳妇做的热饭.当你走到小区门口的时候你需

Oauth2.0认证原理

Oauth2.0 认证协议 Oauth2.0 应用场景: 微信联合登录     授权管理 互联网开放平台互相调用保证安全 微信提供api  给toov5调用  然后就可以获取一些微信的信息  比如微信头像 开放平台有 支付宝  微信 百度等等 不同的开放平台 对接的oauth2.0协议流程都是相同,无非接口地址不同 Oauth2.0原理 (appId appsecret access_token  openId  回调地址 授权地址) 使用: 在微信开放平台申请对应的appId信息 toov5生

OAuth2.0认证和授权原理

什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密码提供给该第三方网站. OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源. 二.OAuth的原理和授权流程 OAuth的认证和授权的过程中涉及的三方包括: 服务商:用户使用服务的提供方,一般用来存消息.储照片.视频.联系人.文件等(

开放授权协议OAuth2.0简介

原文地址: http://stackvoid.com/introduce-to-oath2.0/ 可能你跟我一样,使用过各种第三方开放授权库(如在你的 APP 中获取 QQ 照片或微博评论等)来获取用户的一些资源,今天跟大家总结分享一下开放授权(OAuth2.0,1.0太复杂已经被弃用)的概念和原理,在以后使用开放授权SDK时能快速高效完成. OAuth解决了什么问题? OAuth 产生主要解决了第三方应用访问用户在某网站网络资源的问题.例如,上图中,用户在36氪登陆时,可以用 QQ 来登陆,点

基于OWIN+DotNetOpenOAuth实现OAuth2.0

这几天时间一直在研究怎么实现自己的OAuth2服务器,对于太了解OAuth原理以及想自己从零开始实现的,我建议可以参考<Apress.Pro ASP.NET Web API Security>里面的章节.最后发现其实微软在这方面也已经做了实现,所以文介绍下怎么基于OWIN来实现自己的OAuth2.0授权服务器,,以及怎么使用DotNetOpenAuth作为客户端来访问受保护的资源.  OWIN是一套specification,微软的Katana开源项目是基于OWIN标准开发的,所以本本文更准确

深入理解OAuth2.0协议

1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店后,只需要将泊车钥匙交给服务生,停车的事情就由服务生去处理.与主钥匙相比,这种泊车钥匙的使用功能是受限制的:它只能启动发动机并让车行驶一段有限的距离,可以锁车,但无法打开后备箱,无法使用车内其他设备.这里就体现了一种简单的"开放授权"思想:通过一把泊车钥匙,车主便能将汽车的部分使用功能(如

C# 网络编程之豆瓣OAuth2.0认证详解和遇到的各种问题及解决

        最近在帮人弄一个豆瓣API应用,在豆瓣的OAuth2.0认证过程中遇到了各种问题,同时自己需要一个个的尝试与解决,最终完成了豆瓣API的访问.作者这里就不再吐槽豆瓣的认证文档了,毕竟人家也不容易.但是作者发现关于豆瓣OAuth认证过程的文章非常之少,所以想详细写这样一篇文章方便后面要做同样东西的人阅读.希望文章对大家有所帮助,尤其是想做豆瓣API开发的初学者. (文章中蓝色字表示官方文档引用,红色字是可能遇到问题及注意,黑色字是作者叙述) 一.误区OAuth1.0认证过程    

Linux驱动程序工作原理简介

转自:http://blog.sina.com.cn/s/blog_55465b470100ri1e.html 一.linux驱动程序的数据结构      二.设备节点如何产生?      三.应用程序是如何访问设备驱动程序的?      四.为什么要有设备文件系统?      五.设备文件系统如何实现?      六.如何使用设备文件系统?      七.具体设备驱动程序分析      1.      驱动程序初始化时,要注册设备节点,创建子设备文件      2.      驱动程序卸载时要