加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

细说API – 认证、授权和凭证

发布时间:2019-03-29 01:30:36 所属栏目:策划 来源:林宁
导读:副标题#e# 在一些互联网公司的面试中,面试官往往会问这样一个问题: 如果禁用浏览器 cookie,如何实现用户追踪和认证? 遗憾的是依然有大量候选人答非所问,无法搞清楚 cookie 和 session 之间的区别。而在工作中也有让人惊讶的真实案例:把 user ID 存储到

某些授权模式下 access token 需要暴露给浏览器,充当一个资源服务器和浏览器之间的临时会话,浏览器和资源服务器之间不存在签名机制,access token 成为唯一凭证,因此 access token 的过期时间(TTL)应该尽量短,从而避免用户的 access token 被嗅探攻击。

由于要求 access token 时间很短,refresh token 可以帮助用户维护一个较长时间的状态,避免频繁重新授权。大家会觉得让 access token 保持一个长的过期时间不就可以了吗?实际上 refresh token 和 access token 的不同之处在于即使 refresh token 被截获,系统依然是安全的,客户端拿着 refresh token 去获取 access token 时同时需要预先配置的 secure key,客户端和授权服务器之前始终存在安全的认证。

OAuth、Open ID、OpenID Connect

认证方面的术语实在太多,我在搭建自己的认证服务器或接入第三方认证平台时,有时候到完成开发工作的最后一刻都无法理解这些术语。

OAuth 负责解决分布式系统之间的授权问题,即使有时候客户端和资源服务器或者认证服务器存在同一台机器上。OAuth 没有解决认证的问题,但提供了良好的设计利于和现有的认证系统对接。

Open ID 解决的问题是分布式系统之间身份认证问题,使用Open ID token 能在多个系统之间验证用户,以及返回用户信息,可以独立使用,与 OAuth 没有关联。

OpenID Connect 解决的是在 OAuth 这套体系下的用户认证问题,实现的基本原理是将用户的认证信息(ID token)当做资源处理。在 OAuth 框架下完成授权后,再通过 access token 获取用户的身份。

这三个概念之间的关系有点难以理解,用现实场景来说,如果系统中需要一套独立的认证系统,并不需要多系统之间的授权可以直接采用 Open ID。如果使用了 OAuth 作为授权标准,可以再通过 OpenID Connect 来完成用户的认证。

JWT

在 OAuth 等分布式的认证、授权体系下,对凭证技术有了更多的要求,比如包含用户 ID、过期等信息,不需要再外部存储中关联。因此业界对 token 做了进一步优化,设计了一种自包含令牌,令牌签发后无需从服务器存储中检查是否合法,通过解析令牌就能获取令牌的过期、有效等信息,这就是JWT (JSON Web Token)。

JWT 是一种包含令牌(self-contained token),或者叫值令牌 (value token),我们以前使用关联到 session 上的 hash 值被叫做引用令牌(reference token)。

简而言之,一个基本的JWT令牌为一段点分3段式结构。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读