推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 米兜Java > OAuth2.0 授权码模式

OAuth2.0 授权码模式

米兜Java 2019-02-12

热点推荐

5.https://gitee.com/StarskyBoy/cloud

6.https://github.com/StarskyBoy/cloud

授权码模式

---以使用微博账号登录简书为示例详细讲解其工作原理

原理概要

新浪微博作为服务提供商,拥有用户的头像、昵称、邮箱、好友以及所有的微博内容,简书希望获取用户存储在微博的头像和昵称,假设它们是三个人:

  1. 简书问新浪微博:我想要获取用户 A 的头像和昵称,请你提供

  2. 微博说:我需要经过用户A 本人的许可,然后她去问用户 A 是否要授权简书访问你的头像和昵称

  3. 用户 A 对微博说:我给简书一个临时的钥匙,如果他给你出示了这把钥匙,你就把我的资料给他吧

  4. 简书使用户给它的钥匙获取用户头像和昵称信息。


以上是 OAuth 认证的大概流程。在使用微博授权之前,简书需要先在微博开放平台上注册应用,填写自己的名称、logo、用途等信息,微博开放平台颁发给简书一个应用 ID 和 APP Secret 的密钥,在实际对接中,会使用到这两个参数。


注:

  • 新浪微博开放平台即是认证服务器

  • 用户发放code(时间极短)
    认证服务器发放 token(时间长)

  • 资源服务器提供用户资源

详细流程

OAuth2.0 授权码模式

接下来分步详细解释上图中每步都做了什么

1.用户点击简书上的微博登录按钮,跳转到微博授权页面。微博登录按钮的链接形如下方的 URL:

https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://jianshu.com/callback

URL 中要包含以下参数:

  • client_id:在微博开放平台申请的应用 ID


点击以上链接后跳转到微博的授权页面如下图:

OAuth2.0 授权码模式

这个页面会告诉用户第三方应用要获取用户的哪些数据,以及拥有什么权限,比如在上图中简书会要求获得个人信息、好友关系、分享内容到微博以及获得评论的权限,用户点击“允许”则表示允许简书获得这些数据,进行下一步。


http://jianshu.com/callback?code=2559200ecd7ea433f067a2cf67d6ce6c


3.第三步,简书通过上一步获取的 code 参数换取 Token,Token 就是前文中说到的钥匙。简书请求如下的接口获取 Token:

POST https://api.weibo.com/oauth2/access_token
  要包含以下参数:

  • client_id:在微博开放平台申请的应用 ID

  • client_secret:在微博开放平台申请时提供的APP Secret

  • grant_type:需要填写authorization_code

  • code:上一步获得的 code

注:获取token十分重要,采用POST方式比较安全。


 4.通过第三步的请求,接口返回 Token 和相关数据:

{

 "access_token": "ACCESS_TOKEN",//Token 的值

 "expires_in": 1234,//过期时间

 "uid":"12341234"//当前授权用户的UID。

}

 5.在第四步中获取了access_token ,使用它,就可以去获取用户的资源了,要获取用户昵称和头像,请求如下接口:

GET https://api.weibo.com/2/users/show.json

携带参数:

  • access_token:上一步获取的access_token

  • uid:用户的账号 id,上一步的接口有返回


注:access_token使用时间有限,若失效,常用的解决方法:

  • 重新授权登录

  • 使用refresh_token,重新申请。(一般用在不间断连续在线)


 6.最后一步,微博返回用户信息,简书进行处理,整个流程结束。

  通过以上的方式,在简书和新浪微博中间建立了一个独立的权限层,这个权限由用户赋予,可以被用户随时取消,不同第三方应用之间相互独立,互不干扰,这样就彻底解决了明文存放账号密码的问题。

总结

目前很多互联网公司都提供了自己的开放平台使第三方应用接入。开源项目中也有很多框架提供了OAuth的实现,例如Spring Security OAuth,Apache Oltu等。使用OAuth协议能够很好的保证第三方应用访问用户数据的安全性。

参考文献:

https://www.jianshu.com/p/0db71eb445c8

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

OAuth2.0 授权码模式

END!

OAuth2.0 授权码模式

请留下你指尖的温度

让太阳拥抱你

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《OAuth2.0 授权码模式》的版权归原作者「米兜Java」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注米兜Java微信公众号

米兜Java微信公众号:gh_56006ddabc05

米兜Java

手机扫描上方二维码即可关注米兜Java微信公众号

米兜Java最新文章

精品公众号随机推荐