本博文,只是一个OAuth2.0引子。用于介绍OAuth的大致内容。
有关OAuth授权模式以及实现,我们将在之后的博文中进行描述。
首先,什么是Oauth?Oauth,即Open Authorization,是一种解决用户资源共享问题的协议。例如,我们可以使用微信身份登录某些APP,这样就无需进行花样繁多的注册。该协议使用授权的方式,在其他APP不触及用户名及密码的情况下,为用户提供服务,安全性更高。
到目前为止,OAuth共有两个版本,且两个版本并不兼容。
OAuth Core1.0成型于2007年。
由于存在攻击漏洞,于2009年升级至OAuth Core1.0 Reversion A。
2010年,OAuth成为了RFC标准。
2010年,发布OAuth2.0版本,简化了授权流程。
更详细的OAuth介绍,可从官方网站https://oauth.net/获取。
OAuth1.0网址:https://oauth.net/1/
OAuth2.0网址:https://oauth.net/2/
OAuth2.0有四个角色。
举个例子:
优酷APP登录界面,推荐使用其他账号登录。
我们以QQ身份登录。点击QQ,则跳转至授权界面(QQ登录界面)。
若QQ未登录,则需要输入账户/密码。
若QQ已登录,则只需点击登录,便可完成授权,直接登录优酷。
整个例子中,优酷为第三方APP,QQ为资源服务管理者和验证者。QQ即OAuth服务提供者。
若第三方APP想使用OAuth服务商的服务,需要到该服务商的OAuth平台进行注册。
注册时,需提供一些必要信息。但不同平台实现不同。通用注册信息有:
(1)APP类型。Native application, Web application (service), Application Base on Browser…
(2)APP跳转URIs。授权成功或失败后,将要跳转到的URI(或URI列表)。
注册完毕后,平台会为APP生成唯一的ID。该ID将在授权过程中使用。
关于授权模式,我们将用单独的篇幅总结,见OAuth2.0详解(授权模式篇)。
此处,我们仅列举出所有模式。
OAuth2.0有五种授权模式。
(1)授权码模式(Authorization Code)
(2)授权码简化模式(Implicit)
(3)Pwd模式(Resource Owner Password Credentials)
(4)Client模式(Client Credentials)
(5)扩展模式(Extension)
注:某些OAuth服务平台,需要在注册时,指定想使用的授权模式。例如okta平台。
OAuth是一个开放性协议(一个概念),有很多不同的实现。
OAuth官网提供了很多开发框架,分为服务器端和客户端。
可参见https://oauth.net/code/
我们仅关注java的部分。
其中服务器和客户端都支持的框架有三个:
Apache Oltu
Spring Security OAuth
Restlet Framework (draft 30)
个人推荐:Spring Security OAuth.
原因在于:Apache Oltu文档不完整,而Restlet偏重于讲述一种框架概念,其关于OAuth的资源也有限。
我们将在之后的博文中,将以Spring Security OAuth为例,逐一描述其服务器及客户端的实现。