OAuth 认证

Lucas Xu

我们开发各种应用和网站是给用户用的, 用户登陆之后就会积攒各种各样的数据。 但是现在的世界被几个用户大户所统治了, 如google, facebook, tencent, 人人等 大平台。用户在不同平台上注册不同账户, 进行不同的登录。小网站或者应用也需要有自己的用户系统。 这给用户带来了极大的麻烦。同时不同用户平台之间共享数据也非常不方便。 记得原来开心网为了进行病毒营销找你要邮箱账户密码的痛苦吗?其实世界不需要这么混乱的。

假如如果有你只需要在一家网站注册,在其他网站都可用, 那怎么样,是不是感觉世界很美好? 比如现实世界中的身份证, 只需要公安机关给你发一张, 你可以拿着去住宾馆, 也可以那个买菜刀和住院, 是不是方便很多。 这里, 公安机关是一个权威机构, 他出具的文件其他机构都会承认。 如果你的身份证丢了, 去公安机关开个证明,盖个戳也好使。

网络情况下, 事情变得混乱了,因为没有公安机关。 不过人人也都可以充当公安机关, 你只要在我的系统中注册为我的用户, 我就可以帮你在别的地方认证。 比如作为google的用户, Google可以帮你告诉Facebook说, 这个人是我的用户, 这是他的信息, 给你。 这样Facebook就可以从Google那里拿到你的信息。 这个过程中间有一些授权问题了。

首先, google不能在你不知情的情况下把你的信息告诉Facebook, (谁知道私下里会怎么样, 不过表面上还是需要文明一些的). 所以当Facebook想从google那里知道你的信息的时候, 一种方式是找你要在google那里的用户名和密码, 然后假冒你登陆google的系统,从而得到这些信息。 另外一种方式就是让你写个条子,“我授予Facebook访问我信息的权利”,然后签上你的大名,盖上你的戳,把条子交给Facebook, Facebook拿着这个条子去找Google, 说这是刘文彩同学给我的条子, 你看, 他授权我从你那儿访问他的数据了。 Google验证过签名之后发现是真的, 于是就让facebook把你的信息拿走了。

在网络世界里,你当然不可能真的去写张条子交给facebook, 那该怎么办呢?