网上汉化的叫法众多,本文以阮一峰老师博客的叫法为准。
1. 是否拥有AccessToken?
Access Token:用于访问受保护资源的令牌。
如果有(机器自动认证,不需要用户授权),选用
客户端凭证
如果需要用户授权,则需要进行客户端的判断
2. 客户端类型?
根据客户端安全级别,来选择不同的认证方式。
1)服务端应用(如服务端渲染)
通常安全级别较高,选用
授权码
2)纯前端应用(包括web的SPA和原生APP)
应使用(Proof Key for Code Exchange,PKCE)
基于PKCE扩展的授权码
3)第三方应用
也应使用
授权码
区别在于要打开设备上的原生浏览器,而不能使用嵌入的浏览器
如:iOS上要打开Safiri,而不是使用WebView模拟
传统授权方式
密码式 和 隐藏式 有各自的缺点,这里不再展开介绍,详细可查看底部参考链接。
作为替代:
- 对 密码式 改用 授权码;
- 对 隐藏式 改为 基于PKCE扩展的授权码
参考:
- https://oauth2.thephpleague.com/authorization-server/which-grant/《oauth2-server》(php)
- https://www.jianshu.com/p/7b12a29d06a0《oauth2四种授权方式小结》
- http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html《阮一峰博客——OAuth2.0的四种方式》