记录一下最近对oauth的了解。

oauth是什么

官网对oauth的定义:

An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.

网络开放是一个不变的趋势,那么不可避免的会有各种网络服务间分享内容的需要。OAuth就是为了解决这个问题而诞生的,用户访问第三方资源,不再需要网站提交你的用户名,密码。这样好处自己是安全,而且不会泄露你的隐私给不信任的一方。

举个我们身边国内的例子吧,说明oauth基本的流程和解决的问题:

人人网想要调用QQ邮箱的联系人列表,现在的方法是你需要在人人网输入你的QQ号,QQ密码才能调用,虽然网站上可能都自谓“不保留QQ用户名密码”,但是大家信吗?所以上面这种情况对于用户来说就是不安全的,人人网可能保存我们的QQ密码,oauth就是用来解决这个问题。流程如下:

人人网要访问用户QQ邮箱的联系人列表,首先跳转到QQ邮箱的oauth接口,如果用户同意访问,就输入用户名和密码,告诉QQ邮箱自己授权人人网访问自己的联系人列表。这里输入用户名和密码是在QQ邮箱接口下,所以是安全的。

oauth的流程

oauth常见的有oauth 1.1和oauth 2.0两个版本,现在绝大部分网站都是使用oauth 2.0版本。

一个典型的OAuth应用通常包括三种角色,分别是:

消费方如果想使用服务提供者的OAuth功能,通常需要先申请两样东西:

一个典型的OAuth流程,这里描述的OAuth,被称为三条腿的OAuth(3-Legged OAuth),这也是OAuth的标准版本。:

OAUTH2的四种角色

oauth2中角色的命名和oauth1.1稍有不同,如下所示:

开发者需要做什么

我们在开发app中要将文字、图片、视频等分享到社交网站,那么我们的app就是oauth中的消费方(或者叫做client端)。那么我们就需要向社交网站申请Consumer Key和Consumer Secret。然后根据社交网站提供的oauth接口进行上传等操作。

ios的sdk中提供social framework用于社交化分享,其实就是Apple公司在social framework中集成了向社交网站申请Consumer Key和Consumer Secret。

有一个ios的第三方开源库,封装了消费者端oauth认证的细节,OAuthConsumer