OAuth vs SSO
OAuth概念
oAuth是Open Authorization的简写,分为oAuth服务端和oAuth客户端,比如Github可以允许第三方应用来使用Github快捷登录,这个属于oAuth服务端,是需要程序员自己开发的;比如我们需要开发一个应用比如叫XX,需要接入Github登录,那么就需要开发oAuth的客户端来实现Github快捷登录。
SSO概念
单点登录(Single Sign On),就是通过用户的一次性鉴别登录。通常用于一个大的集团内部的多个系统,统一管理鉴权和授权。
相同点
都会涉及到授权Authorization
不同点
SSO的资源都是同一主体, 多个内部服务共享鉴权和授权;
OAuth的资源则属于两个不同的主体,和外部服务之间交换授权。
OAuth的四种模式
模式名称 | 优点 | 缺点 | 场景 |
---|---|---|---|
授权码授权模式 | 安全,token过期可以刷新 | 请求次数多 | |
隐式授权模式 | 简单 | 不安全,token过期问题 | |
密码模式 | 不需要多次请求转发,额外开销,同时可以获取更多的用户信息 | 认证服务器和应用方必须有超高的信赖 | 自家公司搭建的认证服务器 |
客户端凭证模式 | 最方便 | 最不安全的模式 | 完全信任的服务器端服务 |
OAuth里的相关主体
- Resource owner: 资源所有者,即用户
- Resource server: 拥有资源信息的服务器,通常和授权服务器属于同一应用
- Authorization server: 授权服务器,即提供第三方登录服务的服务器,如Github
- Client Application:第三方应用,我们的应用就是一个Client
其他概念
JWT: 用户身份验证技术
CAS: SSO的一种实现思想,另外还有基于Cookie
参考
- https://www.ruanyifeng.com/blog/2019/04/oauth_design.html
- https://stormpath.com/blog/what-the-heck-is-oauth