Oauth2解决的问题 【目的】
1 Oauth2 可以解决两个系统间用户信息不关联的情况下的访问授权【互相访问时不需要将用户的账户和密码告知给对方】
什么时Oauth2
OAuth 2.0 框架能让第三方应用以有限的权限访问 HTTP 服务,可以通过构建资源
拥有者与 HTTP 服务间的许可交互机制,让第三方应用代表资源拥有者访问服务,或者
通过授予权限给第三方应用,让其代表自己访问服务。【简单的来说就是Oauth2可以通过访问令牌构建出异构系统间的交互机制,客户端或服务可以代替资源拥有者访问资源】
资源拥有者 :用户
客户端 :服务或者app浏览器等
受保护的资源:用户保存在服务器的数据
Oauth2 可以防止如下情景
当两个异构系统进行交互式,你使用的客户端会向你询问账户名和密码然后用这个账户名和密码访问另一个系统如果客户端信任较低那么可能会出现客户端公司盗用信息的行为。
Idea和赛博坦的开发者密钥 我们通过该密钥进行激活相关权限 --> 最大的问题就是密钥泄露 这种方式还存在问题就是开发者每次进行重启服务器就需要手动导入密钥。---Oauth解决了这个问题 它可以办法 具有细粒度的权限访问凭据
京东客户端由于没有权限响应客户端
HTTP/1.1 302 Moved Temporarily
x-powered-by: Express
Location: http://localhost:9001/authorize?response_type=code&scope=foo&client
_id=oauth-client-1&redirect_uri=http://localhost:9000/callback&
state=Lwt50DDQKUB8U7jtfLQCVGDL9cnmwHH1
这个重定向的目的就是隔离客户端防止客户端盗用凭据 ,由用户直接与授权服务器进行交互
客户端发送get请求到授权服务器进行授权
GET /authorize?response_type=code&scope=foo&client_id=oauth-client
-1&redirect_uri=http://localhost:9000%
2Fcallback&state=Lwt50DDQKUB8U7jtfLQCVGDL9cnmwHH1 HTTP/1.1
1 OAuth 客户端是代表资源拥有者访问受保护资源的软件,它使用 OAuth 来获取访问权限。得
益于 OAuth 的设计,客户端通常是 OAuth 系统中最简单的组件,它的职责主要是从授权服务器
获取令牌以及在受保护资源上使用令牌。客户端不需要理解令牌,也不需要查看令牌的内容。相
反,客户端只需要将令牌视为一个不透明的字符串即可。OAuth 客户端可以是 Web 应用、原生
应用,甚至浏览器内的 JavaScript 应用,第 6 章将介绍这些客户端类型之间的区别。在云打印例
子中,打印服务就属于 OAuth 客户端。
2 受保护资源能够通过 HTTP 服务器进行访问,在访问时需要 OAuth 访问令牌。受保护资源需
要验证收到的令牌,并决定是否响应以及如何响应请求。在 OAuth 架构中,受保护资源对是否
认可令牌拥有最终决定权。在云打印例子中,照片存储网站就属于受保护资源。
资源拥有者是有权将访问权限授权给客户端的主体。与 OAuth 系统中的其他组件不同,资
3 源拥有者不是软件。在大多数情况下,资源拥有者是一个人,他使用客户端软件访问受他控制的
资源。至少在部分过程中,资源拥有者要使用 Web 浏览器(通常称为用户代理)与授权服务器
交互。资源拥有者可能还会使用浏览器与客户端交互,如这里所展示的,但这完全取决于客户端
性质。在云打印例子中,资源拥有者就是想要打印照片的最终用户。
4 OAuth 授权服务器是一个 HTTP 服务器,它在 OAuth 系统中充当中央组件。授权服务器对资
源拥有者和客户端进行身份认证,让资源拥有者向客户端授权、为客户端颁发令牌。某些授权服
务器还会提供额外的功能,例如令牌内省、记忆授权决策。在云打印例子中,照片存储网站拥有
自己的授权服务器,用于保护其资源