首页 > 技术分享 > 论新版授权页的前世今生

论新版授权页的前世今生

2012年10月26日 10:42 上午 分类: 技术分享   阅读: 22,757 /linxing

今日,微博开放平台新版授权页面上线,原先实现在授权页直接关注官方微博的方法已经失效,下面我们在聊一下新版授权页以及Scope参数文档:

 

新版授权页的必要性:

新版授权页改变了之前页面信息元素过多,对用户的使用带来干扰的问题,登录和授权这两个行为已在新版中分离,用户能够更好地理解帐号登录和授权的过程,也为未来更多的功能带来承载空间。
当前一个最完整的授权分为三个步骤:登录-普通授权-高级授权(SCOPE)。但这三个步骤并不是必然出现,当用户的新浪微博处于登录状态时,页面会自动跳转到普通授权页,“高级授权”同样也不是必须,如果开发者不申请SCOPE权限,系统会自动跳过此步骤,回调回应用。我们在灰度测试中统计发现,只要合理的使用高级授权,开发者完全不必担心增加操作所带来的页面流失率问题,相反,一个清晰的授权体验更能获取用户的信任。
与此同时,授权项将会变的更加有条理,之前的普通权限将作为基础服务,用户不再有感知,与用户隐私相关的会归到高级授权,用户在授权时有权利逐条取消,进一步增强了隐私控制。

授权三步骤:登录-普通授权-高级授权(SCOPE)

应用场景

开发者需要根据各自的应用场景,选择适用的OAuth2.0授权流程:

1、网站或者站外Web应用,请参考:Web应用的验证授权(Authorization Code)

2、桌面和无线客户端应用,请参考:Web应用的验证授权(Authorization Code),无线客户端可以直接使用官方SDK,通过WebView方式使用授权页。

3、微博站内应用,请参考 站内应用开发指南

 

Web应用的验证授权

基本流程
1. 引导需要授权的用户到如下地址:

https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

2. 如果用户同意授权,页面跳转至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE
3. 换取Access Token

https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE

(其中client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET可以使用basic方式加入header中)
返回值

{ “access_token”:”SlAV32hkKG”, “remind_in “:3600, “expires_in”:3600 }
4. 使用获得的OAuth2.0 Access Token调用API

移动应用的验证授权

移动应用(主要指Mobile Native App),建议使用官方提供的支持SSO授权的SDK, 可以大大简化授权流程开发,降低开发成本。
参考:移动应用SSO授权

站内应用的验证授权

参考:站内应用开发指南

使用OAuth2.0调用API

使用OAuth2.0调用API接口有两种方式:
1. 直接使用参数传递参数名为 access_token https://api.weibo.com/2/statuses/public_timeline.json?access_token=abcd

2. 在header里传递 形式为在header里添加Authorization:OAuth2空格abcd 这里的abcd假定为Access Token的值
其它接口参数正常传递即可。

授权有效期

程序一定要具备足够的健壮性,调用接口时判断接口的返回值,如果用户的access_token失效,需要引导用户重新授权。失效原因有以下几个:

用户取消了对应用的授权

1、access_token自然过期

2、用户修改了密码,冻结了对应用的授权

3、新浪发现用户帐号被盗,冻结了用户对应用的授权
授权级别和OAuth2.0 access_token有效期对应表:

授权级别 测试 普通 中级 高级 合作
授权有效期 1天 7天 15天 30天 90天

注:只有未过文案审核的应用才处于测试级别。
access_token自动延续方案
如果用户在授权有效期内重新打开授权页授权(如果此时用户有微博登录状态,这个页面将一闪而过),那么新浪会为开发者自动延长access_token的生命周期,请开发者维护新授权后得access_token值。
如何查询当前应用的授权级别

你可以在 http://open.weibo.com/apps/应用APPKEY/privilege/oauth 上查询当前应用的授权级别。
如何计算某个用户的access_token过期时间?

开发者可以通过两种方式计算:

1、用户授权时,oauth2/access_token接口返回的expires_in值就是access_token的生命周期。

2、从上述对应表中,找到应用所对应的授权有效期,过期时间 = 用户授权时间 + 授权有效期

如何申请授权有效期

可在应用控制台,接口管理标签下的授权机制选项中进行在线申请。

授权页功能

scope

scope是OAuth2.0新版授权页提供的一个功能,通过scope,平台将开放更多的微博核心功能给开发者,同时也加强用户隐私保护,提升了用户体验,用户在新OAuth2.0授权页中有权利选择赋予应用的功能。

scope开放的接口文档:接口文档

客户端默认回调页

通常Mobile Native App没有服务器回调地址,您可以在应用控制台授权回调页处填写平台提供的默认回调页,该页面用户不可见,仅用于获取access token。

OAuth2.0客户端默认回调页:https://api.weibo.com/oauth2/default.html

强制登录

授权页会默认读取当前用户的新浪微博登录状态,如果你想让用户重新登录,请在调用authorize接口时传入参数:forcelogin=true,默认不填写此参数相当于forcelogin=false。

取消授权回调页

开发者可以在应用控制台填写取消授权回调页,当用户取消你的应用授权时,开放平台会回调你填写的这个地址。并传递给你以下参数:

source:应用appkey

uid :取消授权的用户

auth_end :取消授权的时间

补充说明:

scope说明

scope是OAuth2.0授权机制中authorize接口的一个参数。
通过scope,平台将开放更多的微博核心功能给开发者,同时也加强用户隐私保护,提升了用户体验,用户在新OAuth2.0授权页中有权利选择赋予应用的功能。

注意事项

1:开发者需要先在应用控制台的接口管理中申请到相关的接口,才能使用scope功能。
2:满足上一条后,开发者向用户请求scope权限,就会出现高级授权页面(如下图)

oauth2v3_3.png

scope权限接口

可一次申请多个scope权限,用逗号分隔。

 

scope参数 描述
friendships_groups_read 好友分组读取接口组
friendships_groups_write 好友分组写入接口组
statuses_to_me_read 定向微博读取接口组
follow_app_official_microblog 关注应用官方微博

其他参考资料

OAuth是一种国际通用的授权方式, OAuth2.0的官方技术说明可参看 http://oauth.net/2/
如果你仍在使用Oauth1.0,请进入浏览相关文档。