电脑知识:很多网站都支持第三方授权登录,这究竟是怎么一回事?

引言

现在很多网站都支持第三方授权登录,小伙伴们应该很常见这种授权登录方式了,那小伙伴们知道这种方式是以什么原理实现的么?

今天小编就为大家讲一讲里边的奥秘!

正文

OAuth简介

我们都知道,所有的第三方授权登录底层基本上采用http/https协议。但是由于http/https协议是不可靠的,而客户端和服务端都希望要达到100%的可靠性。所以以OAuth为代表的,基于http/https协议的授权标准也由此诞生并变成了主流。最开始在2006年出现的是OAuth1.0,由于1.0出现了一些安全漏洞等一些问题,5年后的2011年,该团队发布了OAuth2.0标准。

由于目前各大网站已经基本淘汰了OAuth1.0,用OAuth2.0标准来实现的授权功能,所以这篇文章是针对OAuth2.0来介绍的。

角色介绍

OAuth可以分为四个角色,我们这里就拿掘金来举例:

resource owner:可以理解为用户,在这里就是你自己;只有这个用户同意第三方或者基于OAuth的授权方式时,才能进行后续操作。

resource server:资源服务器,在这里就是掘金这个平台。

client:即客户:如果你是用浏览器浏览的掘金网站的话,那浏览器就是client。

authorization server:授权服务器;使用微信,GitHub,还是微博来授权呢,使用哪种方式哪个平台就是authorization server。

运行流程

介绍完四个角色,接着让我们来介绍一下它的运行流程:

![image-20200920154746939](/Users/zhangbo/Library/Application Support/typora-user-images/image-20200920154746939.png)

(A)客户端请求用户的授权;用户要告诉客户端,是否要用第三方授权,是微信?QQ?还是微博?

(B)当用户的同意授权后,把同意授权的消息发送到客户端。

(C)当B结束后,客户端拿着这些同意授权的信息去请求授权服务器,这里的授权服务器就是你所选的微信授权的服务器还是QQ授权的服务器。

(D)如果授权服务器得到并验证这些授权信息有效的话,这时授权服务器会颁发客户端一个访问令牌(在微信公众号的网页授权中,访问令牌的字段名称是access_token)

(E)客户端收到令牌,将其发送给资源服务器申请资源,这里的资源服务器就是我们的掘金服务器。

(F)资源服务器确认无误后,说明认证通过,资源服务器可以将资源返回给客户端。

客户端授权模式

在上面B步骤中,OAuth2.0一共有四种授权模式,我们来一一做个介绍:

授权码模式(Authorization Code)

简化模式(Implicit)

密码模式(Resource Owner Password Credentials)

客户端模式(Client Credentials)

授权码模式(Authorization Code)

(A)用户带着客户端标识符,重定向的URI,本地状态和请求范围这四个属性去请求授权服务器。这里的本地状态是可选属性,可以选择不传。但是如果不传可能会遭受到CSRF攻击,大家可以视情况而定;

(B)授权服务器对用户进行身份验证,用来确定用户是授予还是拒绝;

(C)假设用户被授予了访问权限,授权服务器会将用户重定向到之前所提供的重定向URI中。重定向URI中还包括本地状态和客户标识符;

(D)接着客户端将带着本地状态和客户标识符去请求授权服务器,目的是换取对应的访问令牌;

(E)授权服务器接到客户端的请求后,检验本地状态和客户标识符,如果验证通过,将为客户端返回对应的访问令牌和(可选)刷新令牌。

简化模式(Implicit Grant)

(A)客户端代理用户去请求授权服务器;

(B)用户决定是否给客户端授权;

(C)当用户同意授权后,客户端将重定向到重定向URI,重定向URI中并存在着访问令牌;

(D)接着浏览器请求资源服务器,并且不用带着访问令牌;

(E)资源服务器通过认证后,返回一个网页,并包含访问令牌;

(F)浏览器解析这个网页并提取访问令牌;

(G)浏览器发送令牌给到客户端。

密码模式(Resource Owner Password Credentials)

(A)用户向客户端提供用户名和密码;

(B)客户端将用户提供的资源请求授权服务器;

(C)授权服务器进行身份验证,通过后发出访问令牌。

客户端模式(Client Credentials)

(A)客户端向授权服务器进行身份验证,所要访问令牌;

(B)授权服务器向客户端进行身份验证,如果有效,则发出访问令牌。

文章说到现在,你对第三方登录了解了多少呢?欢迎在文章下方谈谈你的看法或者收获!

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!

C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习软件分享:

编程学习视频分享:

 

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页