这两天又一次反复考虑和均衡把握衡量了一下OAuth和Connect两种开放平台授权模式。
再说一下它们之间的比较重要的区别:
1.OAuth的授权流程主要是通过Request Token和Access Token完成的,而Connect的授权流程主要是通过SessionKey完成的。
SessionKey ,用来维护用户的登录状态。 SessionKey 的有与没有,失效与否,代表用户是否已经登录开放平台。 SessionKey 用户和第三方应用是可以拿到的。
SessionKey 并非是一个 OAuth 名词。由于在整个流程中,存在Session跨域现象,导致了如果用户与第三方应用会话失效需要重新登录的问题。为了解决这个问题,需要使用一个标识来标示用户是否已经登录。该值可以在多个网站之间通过 URL 相互传递。
为了安全,使用Connect,必须要使第三方应用与开放平台之间的交互加上签名。
Request Token ,代表一个第三方应用,用户可以对 Request Token 授权。分为两种状态,授权与为授权。 Request Token 的有效期很短,只供授权和换取 Access Token 使用。 Request Token 用户和第三方应用可以拿到。
Access Token ,代表一个第三方应用的访问数据权利,第三方应用可以使用它来访问内部的某个账户对应的数据。 Access Token 只有第三方应用可以拿到。
OAuth 之所以要使用 Request Token 和 Access Token 两个,就是为了安全考虑。在第三方应用和开放平台 之间的交互无需签名的情况下,用户无法使用 Request Token 拿到开放平台内部的数据。
而假如有黑客的情况,其拿到 Access Token 则会有问题。只能使用签名部分解决这个问题。
2.绝大部分情况下,Access Token的有效期都是无限长时间的。这样,除非用户取消授权,第三方应用可以通过Access Token永久性的获取用户数据(无论用户是否在线和登录);
而相对应的SessionKey,只有用户登录后,在会话的存续期才有效,其他时候是失效的,则第三方应用只有在用户登录并且进入应用时,才能获取开放平台的数据,其他情况下,是不能获取数据的。