zoukankan      html  css  js  c++  java
  • 开放平台_OAuth2.0

    为什么出现oauth2.0

    1 oauth1.0对手机客户端,移动设备等非server第三方的支持不好。其实oauth1.0也是可以支持手机客户端,移动设备等,也有相应的流程。但是oauth1.0是将多种流程合并成了一种,而事实证明,这种合并的流程体验性非常差

    2 oauth1.0的三步认证过程比较繁琐和复杂,对第三方开发者增加了极大的开发难度

    3 oauth1.0的加密需求过于复杂,第三方开发者使用oauth之前需要花费精力先实现oauth1.0的加密算法

    4 oauth1.0的拓展性不够好

    5 oauth1.0生成的access_token要求是永久有效的,这导致的问题是网站的安全性和破坏网站的架构

    因此出现了oauth2.0

    oauth2.0针对1.0的各种问题提供了解决方法:

    1 oauth2.0提出了多种流程,各个客户端按照实际情况选择不同的流程来获取access_token。这样就解决了对移动设备等第三方的支持,也解决了拓展性的问题

    2 oauth2.0删除了繁琐的加密算法。利用了https传输对认证的安全性进行了保证

    3 oauth2.0的认证流程一般只有2步,对开发者来说,减轻了负担

    4 oauth2.0提出了access_token的更新方案,获取access_token的同时也获取refresh_token, access_token是有过期时间的,refresh_token的过期时间较长,这样能随时使用refresh_tokenaccess_token进行更新

    oauth2.0的现状

    oauth2.0截止到2011/8/31 为止已经发布更新了20个版本,下面是oauth2.0ietf标准文档:

    http://tools.ietf.org/html/draft-ietf-oauth-v2-20

    oauth2.0得到了越来越多大公司的支持,比如microsoftyahoo等,也在实际使用过程中不断得到优化和完善,oauth2.0已经成为了业界通用和使用的标准。

    oauth2.0的实现

    oauth2.0有许多种流程,分别适应不同的第三方应用,并且这些流程数目还在不断增加和完善中,一个网站可以实现一种或多种流程

    比如最典型的6中流程有 :

    User-Agent Flow 客户端运行于用户代理内(典型如web浏览器)。

    Web Server Flow 客户端是web服务器程序的一部分,通过http request接入,这是OAuth 1.0提供的流程的简化版本。

    Device Flow 适用于客户端在受限设备上执行操作,但是终端用户单独接入另一台电脑或者设备的浏览器

    Username and Password Flow 这个流程的应用场景是,用户信任客户端处理身份凭据,但是仍然不希望客户端储存他们的用户名和密码,这个流程仅在用户高度信任客户端时才适用。

    Client Credentials Flow 客户端适用它的身份凭据去获取access token,这个流程支持2-legged OAuth的场景。

    Assertion Flow 客户端用assertion去换取access token,比如SAML assertion

    以开心网为例(开心网是实现了oauth2.0的第10个版本)

    开心网实现了

    Web Server Flow

    User-Agent Flow

    Username and Password Flow

    三种方式

    http://wiki.open.kaixin001.com/index.php?id=OAuth2.0%E6%96%87%E6%A1%A3

    oauth2.0的客户端实现是非常方便的,开心网的说明文档也已经非常全了,这里就不多说了

    下面说一下各个流程的步骤:

    Web Server Flow

    web ServerFlow是把oauth1.0的三个步骤缩略为两个步骤

    首先这个是适合有server的第三方使用的。

    1客户端http请求authorize

    2服务端接收到authorize请求,返回用户登陆框页面

    3用户在客户端登陆

    4服务器端将浏览器定位到callbackurl,并同时传递Authorization Code

    5客户端使用https发送access_token

    6服务器端收到access_token请求,验证Authorization Code---生成access_token, refresh_token,和过期时间--access_tokenrefresh_token和过期时间入库

    7 返回access_tokenrefresh_token,过期时间

    8 用户使用HTTPS+ access_token请求开放平台接口

    User-Agent:

    适合所有无server端配合的客户端

    1客户端http请求authorize

    2服务端接收到authorize请求,返回用户登陆框页面

    3用户在客户端登陆

    4服务器端将浏览器定位到callbackurl,并同时传递access_token和过期时间

    这里面的access_token可以考虑放在缓存中而不是放在数据库中,一旦过期时间到就可以作废了

    Username and Password Flow

    适合所有情况

    1 客户端https请求access_token(使用https是由于参数中带着开心网的用户名和密码信息)2 服务器端收到access_token请求---生成access_token, refresh_token,和过期时间--access_tokenrefresh_token和过期时间入库

    3 json返回access_token, refresh_token,和过期时间

    特别说明:

    oauth2.0客户端得到access_token之后是使用https来调用请求的,这样做的目的主要是放重放和数据泄露 

    参考文档:

    http://djb4ke.iteye.com/blog/683153

    http://oauth.net/2/

    http://hueniverse.com/2010/05/introducing-oauth-2-0/

    http://wiki.open.kaixin001.com/index.php?id=OAuth2.0%E6%96%87%E6%A1%A3 

    作者:轩脉刃(yjf512) 
    出处:(http://www.cnblogs.com/yjf512/) 
    版权声明:本文的版权归作者与博客园共有。欢迎转载阅读,转载时须注明本文的详细链接。
     

    实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    mysql只会使用到一个索引的原因
    SQL优化-三
    SQL优化-二
    SQL优化-一
    关于调和级数的证明
    SA 复习笔记
    点分治学习笔记
    FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ
    python3+selenium webdriver实战应用篇-打造爱奇艺直播间机器人
    Photoshop如何修改(半)透明像素的RGB值
  • 原文地址:https://www.cnblogs.com/yjf512/p/2161259.html
Copyright © 2011-2022 走看看