OAuth2.0的授权码模式

起因

前段时间给大家搭建了商城,购物的时候用户需要先登录用户,就必须注册账号,这样的弊端我就不用跟大家说了。现在市场上流行qq互联,微信互联,就是由于用户不太愿意再注册账号,记住一个又一个用户名和密码。通过一个常用的应用授权登录,方便快捷,我们今天就来讲一下如何实现授权登录。

OAuth2.0简介

说到授权登录,就必须提一下OAuth2.0协议,百度百科上是这样描述的:在这里插入图片描述
简单地说,就是房子主人有一把钥匙,钥匙借给你,你才可以进入房子。这里,房子主人是服务提供方,钥匙是临时令牌,你是客户端,房子是访问的资源。OAuth协议有4种模式,授权码模式,密码模式,简化模式,客户端模式。原理上大同小异,授权码模式是其中最正规,也是最常用的一种模式。接下来我们讲一下授权码模式的实现步骤,如果对此开发过程不感兴趣的,可以直接跳过,看下面的操作配置过程。

授权码模式

大体分三步骤:oauth/authorize,oauth/token,user/me
第一步,A网站提供一个登陆链接,链接内容如下:

https://b.com/oauth/authorize?
  response_type=code&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read

其中的参数有必要解释下:
response_type为必传,表示要求返回授权码,固定为code;
client_id为必传,表示A网站,让B网站知道是谁在请求;
redirect_uri为必传,表示B网站拒绝或接受请求后的跳转网址;
scope为非必传,表示要求的授权范围(这里是只读)。
用户会跳转到一个授权登录界面,然后询问是否同意给予A网站授权。用户同意后,就会跳回redirect_uri指定的网址。跳转时,会传回一个授权码。

https://a.com/callback?code=AUTHORIZATION_CODE

第二步,上面拿到code,就可以在后端,向B网站请求令牌。

https://b.com/oauth/token?
 client_id=CLIENT_ID&
 client_secret=CLIENT_SECRET&
 grant_type=authorization_code&
 code=AUTHORIZATION_CODE&
 redirect_uri=CALLBACK_URL

这步的操作就是指明自己的身份,去请求令牌。
client_id和client_secret用来让B确认A的身份;
grant_type的参数固定为authorization_code;
code是上一步拿到的授权码;
redirect_uri是获取令牌后的回调网址。
第三步,B网站收到请求,颁发令牌。然后向redirect_uri指定的网址发送一段JSON数据:

{    
  "access_token":"ACCESS_TOKEN",
  "token_type":"bearer",
  "expires_in":2592000,
  "refresh_token":"REFRESH_TOKEN",
  "scope":"read",
  "uid":100101,
  "info":{...}
}

其中的access_token,就是令牌,就可以通过它访问资源。

配置OAuth参数

我们需要配置的总共就五项:
client_id,client_secret,authorized_url,token_url,redirect_uri。
如果是访问自己开发的资源数据,client_idclient_secret需要通过自己设置;qq授权跟微信授权则需要在qq互联和微信开放平台注册一个网站应用,就能获得对应的AppID(client_id)和AppSecret(client_secret)。
authorized_url可以简单的用自己的网站加上/oauth/authorize,比如:http://www.A.com/oauth/authorize。
token_url可以在自己网站上加/oauth/token,比如:http://www.A.com/oauth/token。
redirect_uri的设置就按照自己的需求。
源码的地址就在https://github.com/bigfa/wp-oauth,其中不仅有qq和微信的授权登录,还有微博,豆瓣,GitHub等各种社交网站。
另外国外开发的最全的OAuth2.0登录的地址是https://oauth.net/code/,它还拓展了各种开发语言,有兴趣的同学可以去学习一下。

总结

好了,这次我们就讲了OAuth2.0协议中最重要,也是最常用的授权码方式,原理很好懂,配置也比较明了,下一次,我们就实际运用一下,把这个授权登录,配置在我们的商城中。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值