文
章
目
录
章
目
录
我们经常会遇到用微信、QQ、GitHub等账号登录其他网站或应用的情况,这种便捷的操作背后,其实是OAuth(Open Authorization)这个重要的授权协议在发挥作用。它让不同系统之间能安全共享用户资源,还不用用户透露密码。
一、OAuth的作用及常见场景
简单来说,OAuth能让你授权第三方应用访问你的资源,却无需告知密码。就像你用“GitHub账号”登录掘金、Gitee,或者用“微信”登录小程序、其他网站时,对方不用知道你的GitHub或微信密码,也能识别出你是谁,这就是OAuth的神奇之处。
二、OAuth的核心角色
OAuth涉及几个关键角色 :
- 资源所有者:就是用户,比如正在操作的你。
- 客户端:指那些想要访问你资源(像头像、昵称)的第三方应用。
- 授权服务器:以GitHub登录授权接口为例,它负责发放授权码和访问令牌。
- 资源服务器:像GitHub的用户API,用于返回用户信息。
三、OAuth的授权模式
OAuth有多种授权模式,各有不同的应用场景:
- 授权码模式:最为安全,适合Web应用。在企业开发、第三方登录、单点登录中很常见。它的流程是用户先授权第三方访问自己的资源,第三方通过获取的“授权码”安全地换取“访问令牌(Access Token)”。
- 简化模式:以前常用于前端单页应用,现在基本不怎么用了。
- 密码模式:需要用户直接输入账号密码,不太推荐使用。
- 客户端模式:不涉及用户,主要用于应用之间的访问。
四、授权码模式详解
授权码模式的具体流程如下:
- 用户访问第三方应用,点击“使用GitHub登录”,页面会跳转到GitHub的授权页。
- 用户登录GitHub并点击授权,GitHub记录授权行为后,会重定向到第三方应用的回调地址,并带上授权码。
- 第三方应用的后端拿到授权码后,向GitHub换取访问令牌。
- 有了访问令牌,第三方应用就能获取用户信息。
使用授权码模式要注意几个要点:要利用state
参数防止CSRF攻击;令牌是有时效的;回调地址redirect_uri
必须精准匹配;授权页面需要用户确认授权。掌握这些,就能更好地理解和运用OAuth的授权码模式进行开发。