it_worker365

   ::  ::  ::  ::  :: 管理

角色

授权码许可类型

客户需要授权客户端访问资源持有者的部分资源,这里如果直接将用户名密码给客户端则会产生账号泄露风险,并且无法对资源范围管控,没有到期时间除非修改密码等问题  ~  所以需要授权码,通过授权码,客户端找授权服务换取访问令牌!授权客户端用令牌取访问有限资源

OAuth 2.0 授权的核心就是颁发访问令牌、使用访问令牌

为什么要有授权码换访问令牌的步骤 -》》直接返回访问令牌,那我们肯定不能使用重定向的方式。因为这样会把安全保密性要求极高的访问令牌暴露在浏览器上,从而将会面临访问令牌失窃的安全风险,有了授权码的参与,访问令牌可以在后端服务之间传输,同时呢还可以重新建立小明与小兔软件之间的“连接”

为啥要重定向两次-》》当小明被浏览器重定向到授权服务上之后,小明跟小兔软件之间的 “连接” 就断了,小明授权之后,又重新重定向回到了小兔软件的地址上,这样小明就跟小兔软件有了新的 “连接”,于是有了第二次授权码的重定向

三方服务首先要到开放平台注册,注明第三方软件也会请求受保护资源的可访问范围,生成对应的app_id 和 app_secret,redirect_uri,scope 等信息

授权服务

最终生成 code 和 app_id(第三方软件的应用标识) + user(资源拥有者标识)之间的对应关系

tokenMap.put(accessToken,appId+"|"+user+"|"+System.currentTimeMillis()+"|"+expires_in); return accessToken;}

刷新令牌,用户在一定期限内无需重新点击授权按钮,就可以继续使用第三方软件

JWT 就是用一种结构化封装的方式来生成 token 的技术,分为 HEADER(头部)、PAYLOAD(数据体)和 SIGNATURE(签名)三部分,因为 JWT 令牌本身就包含了之前所要依赖数据库或者依赖 RPC 服务才能拿到的信息

JWT 令牌需要在公网上做传输。所以在传输过程中,JWT 令牌需要进行 Base64 编码以防止乱码,同时还需要进行签名及加密处理来防止数据信息泄露

第三方应用客户端关注

资源所有者

资源拥有者的凭据,就是用户的凭据,就是用户名和密码,小兔此时就是京东官方出品的一款软件,小明也是京东的用户,防止用户名密码满天飞,使用了 token 来代替这些“满天飞”的敏感信息

客户端凭据许可

小兔软件访问了一个不需要用户小明授权的数据,比如获取京东 LOGO 的图片地址,这个 LOGO 信息不属于任何一个第三方用户,“资源拥有者被塞进了第三方软件中” 或者 “第三方软件就是资源拥有者”

隐式许可

小明使用的小兔打单软件应用没有后端服务,就是在浏览器里面执行的,第三方软件小兔直接嵌入浏览器中,小兔软件对于浏览器就没有任何保密的数据可以隐藏了,也不再需要应用密钥 app_secret 的值了,也不用再通过授权码 code 来换取访问令牌 access_token 的值了。因为使用授权码的目的之一,就是把浏览器和第三方软件的信息做一个隔离,确保浏览器看不到第三方软件最重要的访问令牌 access_token 的值

各种类型的对比,安全性授权码最高,

如果小兔软件是官方出品,那么可以直接使用资源拥有者凭据许可;

如果小兔软件就是只嵌入到浏览器端的应用且没有服务端,那就只能选择隐式许可;

如果小兔软件获取的信息不属于任何一个第三方用户,那可以直接使用客户端凭据许可类型

posted on 2021-03-17 10:37  it_worker365  阅读(65)  评论(0编辑  收藏  举报