我们在开发的时候关于权限会遇到两种情形:认证和授权。
Authentication,即认证,对用户的身份进行认证,判断其身份是否有效,也就是让网站知道“你是你所声称的那个用户”;
Authorization,即授权,在已知用户身份合法的情况下,经用户授权来允许某些操作,也就是让网站知道“你能被允许做那些事情”。
由此可知,授权要在认证之后进行,只有确定用户身份只有才能授权。
Oauth2讨论的就是授权的情况,一般用在第三方应用登录的情况。现在很多Oauth2的实现其实已经加入了伪验证和单点登录的实现,而不仅仅只是授权去拿信息。
要了解Oauth2,首先要了解几个基本概念:
可以参考:
http://www.bubblecode.net/en/2016/01/22/understanding-oauth2/
https://www.cnblogs.com/Wddpct/p/8976480.html
1. 角色 (Roles)
Oauth2中定义了四种角色:
1)资源所有者 (Resource Owner):资源所有者即代表授权客户端访问本身资源信息的用户(User),也就是应用场景中的“开发者A”
2) 资源服务器 (Resource Server):资源服务器托管了受保护的用户账号信息
3) 授权服务器 (Authorization Server):授权服务器验证用户身份然后为客户端派发资源访问令牌。可以和资源服务器是同一个服务器。
4) 客户端 (Client):即代表意图访问受限资源的第三方应用
2. 客户端应用注册
1)一般提供应用名称,应用网站,回调URL
2)注册成功返回 Client ID 和 Client Secret
3. 授权流程(Workflow)

4. 根据不同的情况,Oauth2定义了四种授权类型来应对不同的情况:
1) 授权码授权 (Authorization Code Grant)
2) 默认模式授权 (Implicit Grant)
3) 密码凭证授权 (Resource Owner Password Credentials Grant)
4) 客户端凭证授权 (Client Credentials Grant)
5. 令牌 (Token)
1) Access Token:从授权服务器获取,之后用来去资源服务器获取资源
2) Refresh Token:Access Token过期以后,用它来从授权服务器更新Access Token,一般比Access Token过期时间长。
Spring Boot有官方的示例来实现Oauth2和单点登录的情况。
https://spring.io/guides/tutorials/spring-boot-oauth2/
https://github.com/spring-guides/tut-spring-boot-oauth2/blob/master/overview.adoc
Google有个测试Oauth2的网站可以尝试。
https://developers.google.com/oauthplayground
网友评论