OAuth简介
Howard Yin 2020-01-03 15:19:00 云计算OAuth概念编程框架
# 快递员问题
- 假设在一个有门禁的小区,小区里的每个住户都有各自的用户名和密码,在进入小区时要输入用户名和密码才能开门
- 有假设小区住户经常网购和外卖,常有快递员来送货
- 小区很大,住户不想每次都跑去小区门口给快递员开门
- 住户不可以将自己的门禁用户名和密码给快递员
问:如何改造门禁系统,能让快递员进入小区把快递直接送到住户家里,又不需要获取住户的用户名和密码?
答:添加一个临时账户系统。在快递员每次来的时候,让他自行联系要送货的住户,从住户处授权获取一个临时的账户,这个账户只能开指定的几个门(比如只能开小区大门和住户家楼下的门)、有一定的时间限制、且可以随时被授权住户注销,一个住户也可以授权注册多个临时账户给不同快递员。快递员拿到此账户后就可以一路畅通直奔住户家(临时账户可以开门),住户也可以知道谁来了(快递员联系了住户才获得账户所有用户知道)。
# 互联网场景的快递员问题
- 一个第三方应用B想要获取用户在应用A中的一些信息
- 第三方应用B不能获取到用户在A的用户名密码(为保证安全用户安全意识很高,不会在第三方应用上输入用户名和密码)
问:应用A应提供一种怎样的服务,在用户同意的情况下让第三方应用在不使用用户名和密码就能获取用户信息
答:在A中添加一个“令牌”(临时账户)功能。第三方应用每次要获取用户信息的时候,就让用户跳转到应用A的令牌创建页面,用户在应用A的这个页面创建好令牌后再将令牌交给第三方应用。
具体地,当应用B要从A获取信息时,通过一个超链接链到A的令牌创建页,并且在这个超链接里加上应用B的ID(应用B先要在应用A中注册才能使用第三方认证)和令牌创建完成后的回调地址:
https://b.com/oauth/token?
client_id=应用B的ID&
client_secret=应用B的密码&
grant_type=authorization_code&
redirect_uri=令牌创建完成后的回调地址
1
2
3
4
5
2
3
4
5
当用户将令牌创建完成后,再根据回调地址将跳转到指定的页面,同时在链接里加上创建好的令牌: