OAuth授权登录

一、写在前面

日常生活中,我们经常看到到一个网站时,需要登录的时候,都提供了第三方的登录,也就是说你可以使用你的微信,QQ,微博等账号进行授权登录。那么这个认证登录的东西到底是什么呢?

微信授权登录页面

或者说你实现这样的授权登录,该怎么做呢?我觉得思路: 首先是登录的网站时,去在第三方登录后,第三方回调登录网站的接口,然后网站这边拿到第三方的已经登录状态,就可以在网站本身登录了。就相当于微博微信就是你的登录用户名和密码的校验。

二、OAuth授权登录

解决上面的问题,就能用到OAUTH协议。

1)【是什么】:



OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth是Open Authorization的简写。现在OAuth已经到2.0版本了。两者不兼容。OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。现在SNS网站对两个协议的支持情况如下:

各网站对OAuth版本支持情况

2)【使用场景】



== 如果一个用户需要两项服务:一项服务是图片在线存储服务A,另一个是图片在线打印服务B。

由于服务A与服务B是由两家不同的服务提供商提供的,所以用户在这两家服务提供商的网站上各自注册了两个用户,假设这两个用户名各不相同,密码也各不相同。当用户要使用服务B打印存储在服务A上的图片时,用户该如何处理?法一:用户可能先将待打印的图片从服务A上下载下来并上传到服务B上打印,这种方式安全但处理比较繁琐,效率低下;法二:用户将在服务A上注册的用户名与密码提供给服务B,服务B使用用户的帐号再去服务A处下载待打印的图片,这种方式效率是提高了,但是安全性大大降低了,服务B可以使用用户的用户名与密码去服务A上查看甚至篡改用户的资源。

==用OAUTH实现背景一节中的典型案例:当服务B(打印服务)要访问用户的服务A(图片服务)时,通过OAUTH机制,服务B向服务A请求未经用户授权的Request Token后,服务A将引导用户在服务A的网站上登录,并询问用户是否将图片服务授权给服务B。用户同意后,服务B就可以访问用户在服务A上的图片服务。整个过程服务B没有触及到用户在服务A的帐号信息。

3)【认证步骤】



==【OAuth 1.0a】

OAuth1认证基本步骤:

获取未授权的Request Token(temporary credentials)

请求用户授权Request Token

使用授权后的Request Token换取Access Token(token credentials)

使用 Access Token 访问或修改受保护资源

OAuth1.0流程

==【OAuth 2.0 】

   OAuth2.0和OAuth1.0的区别还是在于简化了认证过程,不需要从未授权的Request Token转化到授权Request Token,而是利用app key通过用户授权生成access token但是,与1.0的不同之处是access token有自身的有效期,且不同平台、不同级别的程序有着不同的有效期,在程序开发中一定记得判断access token是否过期,对于过期之后的处理方法主要是利用access token和refresh token重新生成access token或者重新利用app key向服务器发送请求生成access token。由于这个问题,与OAuth1.0基本一致不一样,各个平台OAuth2.0做了不一样的选择。

  OAuth2.0服务支持以下获取Access Token的方式:

  a. Authorization Code:Web Server Flow,适用于所有有Server端配合的应用。

  b. Implicit Grant:User-Agent Flow,适用于所有无Server端配合的应用。

  因为demo是无服务器的程式,所以我们采用Implicit Grant:User-Agent Flow的获取方式。

OAuth2.0步骤

4)【国内主要OAuth授权平台】



==【概述】 国内主要有3种授权登录形式,分别是微信、QQ和新浪微博。3种平台授权登录的流程大同小异,都是需要在其对应的开放网站上注册应用且产生appid及appsecert(或类似的其它叫法),并利用上述参数按照ahth2方式授权登录。授权登录成功后获取到你的应用相对于授权平台的唯一标识(微信、QQ叫openid,新浪微博叫uid)。

授权流程图

==【微信】:目前,微信的第三方授权登录是由微信开放平台来承载的。根据其最新的文档,用户通过微信授权登录同时用户授权了获取userinfo时,则授权成功后会出现unionid字段,即微信开放平台会同时返回用户的openid和unionid(移动应用微信登录开发指南)。开发者只需要将openid和unionid都保存到数据库即可。

==【QQ】:QQ授权登录平台要想保存unionid可能要稍微麻烦一点。需要联系QQ客服申请获取unionid的全限。详见常见问题 - 文档资料--QQ互联的问题1。按照其要求发送邮件申请unionid的访问权限即可。正常情况下QQ客服会很快开通权限并回复开发者的申请邮件,并在邮件中比较详细的说明调用接口获取unionid的方式。

微博的授权页面

==【 新浪微博】:新浪比较好,新浪微博的移动App和网页版的唯一标识都是统一的uid,无需做额外的操作。

三、写在最后

OAuth协议很有用处,有机会还是自己使用下,这样才能加深理解和记忆。

原文地址:https://www.cnblogs.com/zytrue/p/8646290.html

时间: 2024-08-25 20:49:12

OAuth授权登录的相关文章

微信订阅号里实现oauth授权登录,并获取用户信息 (完整篇)

摘要 这段时间一直有人问我,订阅号实现的oauth授权登录的问题,之前写的比较简单,很多人不明白.众所周知,微信公众号分订阅号.服务号.企业号:每个号的用途不一样,接口开放程度也不一样.微信还有个扯淡的开放平台,号称统一管理众多公众号的.反正都是交钱的功能多,两个平台把我弄得傻傻分不清楚.切入正题,上个公司有个微信订阅号,内嵌了一个微网站,并且要实现授权登录. oauth 授权登录 前段时间一直有人问我有关订阅号实现的oauth授权登录的问题,之前一篇写的比较简单,很多人不明白. 众所周知,微信

啊Ran讲微信开发(.net) :公众号(服务号)+自定义服务器(OAuth授权登录)

上一篇我们探讨到自定义菜单key为view带有一个"url"参数的点击事件,这边我们就聊聊"微信授权登录". 1.网页授权接口 网页授权接口允许微信公众号的第三方网页获取微信个人用户的基本信息,包括昵称,头像,性别,城市,国家,注册时间等.利用微信个人用户的基本信息,可以实现体验优化,用户来源统计,账号绑定,用户身份鉴权等功能. OAuth协议为用户资源的授权提供了一个安全的,开放而简易的标准,与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的账户信

如何在微信订阅号里实现oauth授权登录

前端时间折腾过的蛋疼问题,好不容易解决了,现在把这个分享出去: 众所周知,微信公众号分订阅号.服务号.企业号:每个号的用途不一样,接口开放程度也不一样. 微信还有个扯淡的开放平台,号称统一管理众多公众号的.反正都是交钱的功能多,两个平台把我弄得傻傻分不清楚. 切入正题,上个公司有个微信订阅号,内嵌了一个微网站,并且要实现授权登录. 这个授权登录的接口只有认证的服务号才能调用,订阅号要实现这个功能只能另辟蹊径: 这个是微信公众号的api地址 http://mp.weixin.qq.com/wiki

第三方登录(OAuth授权)(如何进行新浪OAuth授权)

OAuth授权:是一种可以让第三方在不接触用户的账号的密码的同时对第三方程序授权. 如何进行新浪OAuth授权: 1,成为新浪的开发者(入会) 利用自己的新浪微博账号登录:open.weibo.com   新浪开放平台 2,创建应用程序(拿到身份证) 点击首页的创建应用按钮->填写应用名称/地址/分类/平台等等 应用名称:将来发布微博显示的微博 应用地址:点击微博跳转到的网页 身份证:App Key App Secret 3.开始授权 ->获取授权的RequestToken(获取新浪提供的登陆

OAuth 第三方登录授权码(authorization code)方式的小例子

假如上面的网站A,可以通过GitHub账号登录: 下面以OAuth其中一种方式,授权码(authorization code)方式为例. 一.第三方登录的原理 所谓第三方登录,实质就是 OAuth 授权. 数据的所有者告诉系统,同意授权第三方应用进入系统,获取数据.系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用. 用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份.获取第三方网站的身份数据,就需要 OAuth 授权. 这里利用OAuth au

SPA+.NET Core3.1 GitHub第三方授权登录 使用AspNet.Security.OAuth.GitHub

使用SPA+.NET Core3.1实现 GitHub第三方授权登录 类似使用AspNet.Security.OAuth.GitHub,前端使用如下:VUE+Vue-Router+axios AspNet.Security.OAuth.GitHub GitHub https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers GitHub授权登录 什么配置的过程不说了..有一推. GitHub 第三方登录 给你的网站添加第三方登

使用新浪微博开放平台请求授权登录(获取接口及创建应用过程)

1.登录新浪微博开放平台,点击最上面的文档找到微博API,OAuth授权接口: 2.点击请求授权,获取URL及参数,此时我们还没有创建应用 . 3.创建应用,之后输入自己微博密码,按步骤给应用起名字等等,这里忽略. 4.创建完成之后,点击应用,基本信息里有AppKey及AppModel Secret(这个以后会用) 高级信息设置回调页(随便输入一个网址即可) 测试信息(将测试账号添加) , 5.在浏览器里输入(用苹果自带的浏览器,不要用谷歌) https://api.weibo.com/oaut

微信授权登录并获取用户信息接口开发

总结一下微信授权登录并获取用户信息 这个接口的开发流程. 一.首先你的微信公众号要获得相应的AppID和AppSecret,申请微信登录且通过审核后,才可开始接入流程. 二.授权流程 1.流程说明 (1). 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数: (2). 通过code参数加上AppID和AppSecret等,通过API换取access_token: (3). 通过access_token进行接口调用,获取

IOS OAuth授权分析

一.黑马微博 ---> 用户的微博数据1.成为新浪的开发者(加入新浪微博的开发阵营)* 注册一个微博帐号,登录http://open.weibo.com帐号:[email protected]密码:ios4762450* 填写开发者的个人信息(比如姓名.出生日期.上传身份证) 2.创建应用* 假设应用名称叫做"黑马微博"* 应用创建完毕,默认就进入"开发"阶段,就具备了授权的资格* 应用相关数据App Key:3141202626 // 应用的唯一标识App