OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用
是目前最流行的授权机制,用来授权第三方应用,获取用户数据。
学习oauth2的资料大多来自
http://www.ruanyifeng.com/blog/2019/04/oauth_design.html
授权机制设计(例子)
-
门禁系统的密码输入器下面,增加一个按钮,叫做"获取授权"。快递员需要首先按这个按钮,去申请授权。
-
他按下按钮以后,屋主(也就是我)的手机就会跳出对话框:有人正在要求授权。系统还会显示该快递员的姓名、工号和所属的快递公司。我确认请求属实,就点击按钮,告诉门禁系统,我同意给予他进入小区的授权。
-
门禁系统得到我的确认以后,向快递员显示一个进入小区的令牌(access token)。令牌就是类似密码的一串数字,只在短期内(比如七天)有效。
-
快递员向门禁系统输入令牌,进入小区。
- 单独生成一个令牌原因:
1:这是因为快递员可能每天都会来送货,第二天他还可以复用这个令牌。
2:另外,有的小区有多重门禁,快递员可以使用同一个令牌通过它们。
- 单独生成一个令牌原因:
例子很直观的变现了 oauth的作用:OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。
令牌与密码
令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。
-
令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。
-
令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。
-
令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。
上面这些设计,保证了令牌既可以让第三方应用获得权限, 同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。 注意,只要知道了令牌,就能进入系统。系统一般不会再次确认身份, 所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。 这也是为什么令牌的有效期,一般都设置得很短的原因。