专栏名称: 程序猿
本微信公众号:imkuqin,为程序员提供最新最全的编程学习资料的查询。目前已经开通PHP、C/C++函数库、.NET Framework类库、J2SE API查询功能。
相关文章推荐
程序员小灰  ·  蔚来汽车裁员约10%,20分钟完成裁员。。。 ·  2 天前  
OSC开源社区  ·  地表最强「开源版PS」——GIMP ... ·  2 天前  
OSC开源社区  ·  在RISC-V上构建AI应用 ·  昨天  
OSC开源社区  ·  Java玩转MCP:手把手教你打造Git ... ·  3 天前  
程序员小灰  ·  小灰的DeepSeek星球,马上涨价! ·  3 天前  
51好读  ›  专栏  ›  程序猿

从密码到token, 一个授权的故事

程序猿  · 公众号  · 程序员  · 2017-08-11 16:14

正文

来自: 码农翻身 (微信号:coderising)


1. 我把密码献给你


小梁开发了一个“信用卡管家”的程序 , 可以自动从邮箱中读取信用卡相关邮件,分析、汇总,形成一个报表。


小梁找到信用卡达人张大胖试用 : “你的信用卡那么多,看看我这个程序吧, 保准你会爱死它。”


张大胖尝试了几下说: “咦,你这个程序要读取我的网易邮箱啊,那需要用户名/密码吧”


“是啊 , 你把密码告诉输入程序不就行了, 我的程序替你加密保存,保证不会泄露。”


“得了吧你, 我可不会告诉你我的密码, 为了方便记忆, 我的密码都是通用的, 万一泄露了就完蛋了”


小梁说:“这样吧,我不保存,我就访问邮箱的时候使用一次, 用完就扔!”


“你以为你是阿里巴巴啊, 有信用背书, 你只是个小网站, 我把密码献给你,总是觉得不安全。就是我信任你,别人能信任你吗?”


小梁想想也是, 这是一个巨大的心理障碍, 每个人都要誓死捍卫自己的密码啊。


2. Token


过了一周, 小梁兴致勃勃地把张大胖拉来看“信用卡管家”的升级版。


“升级为2.0了啊, 这次不用问你要网易邮箱的用户名和密码了”


“那你怎么访问我的邮箱?”


“很简单,我提供了一个新的入口,使用网易账号登录, 你点了以后,其实就会重定向到网易的认证系统去登录,  网易的认证系统会让你输入用户名和密码,并且询问你是否允许信用卡管家访问网易邮箱, 你确认了以后,就再次重定向到我的‘信用卡管家’网站, 同时捎带一个‘token’ 过来, 我用这个token 就可以通过API来访问网易邮箱了。 在这个过程中, 我根本不会接触到你的用户名和密码,怎么样, 这下满意了吧?”


“你说得轻松, 你这个信用卡管家是个小网站,还没有什么名气, 网易怎么会相信你这个网站呢?”


“我当然要先在网易注册一下啊, 他们会给我发个app_id 和app_secret,  我重定向到网易的时候需要把这个东西发过去, 这样网易就知道是‘信用卡管家’这个应用在申请授权了。”


(点击看大图)


张大胖说: “ 你这重定向来重定向去的, 实际上不就是为了拿到一个token 吗?”


“对啊,因为你不信任我的信用卡管家, 不让它保存你的密码,只好用token的方法了 , 它是网易认证中心颁发的,实际上就代表了你对信用卡管家访问邮箱的授权,所以有了这个token 就可以访问你的邮箱了”


"对了"  张大胖问题, “你为什么用Javascript的方式来读取token啊”


“这样我的后端服务器就不用参与了,工作都在前端搞定, 你注意到那个URL中的 # 号了吗? www.a.com/callback # token=”


张大胖说: “我知道啊,这个东西叫做hash fragment,  只会停留在浏览器端, 只有Javascript 能访问它,并且它不会再次通过http request 发到别的服务器器, 我想这是为了提高安全性吧。”


小梁说: “没错, 那个token非常非常重要,得妥善保存,不能泄露!”


“可是在第6步通过重定向,这个token 以明文的方式发送给了我的浏览器, 虽然是https ,不会被别人窃取,可是浏览器的历史记录或者访问日志中就能找到, 岂不暴露了?”


小梁说: “这个.... , 我说你这个家伙,安全意识很强烈嘛, 让我想想,有没有更安全的方式。"


3. Authorization  Code + Token







请到「今天看啥」查看全文