OAuth 2.0

OAuth 2.0

OAuth 2.0 是一种授权机制,主要用来颁发令牌(token)。OAuth 的核心就是向第三方应用颁发令牌

概念及解释

OAuth 2.0 的一个简单解释

OAuth 2.0 的四种方式

  • 授权码(authorization-code) // 需要经过授权码,适用于有前后端
  • 隐藏式(implicit) // 适用于没有后端的应用,不需要授权码
  • 密码式(password): // 直接用用户名密码,用于内部应用
  • 客户端凭证(client credentials) // 适用与对APP授权,而不是单个用户

四种方式都需要在B站先注册

浅谈OAuth 和 OpenID 相关技术

OpenID 和 OAuth

两者很像,但本质上来说它们是截然不同的两个东西:

  • OpenID: 只用于 身份认证(Authentication),允许你以 同一个账户 在 多个网站登陆。它仅仅是为你的 合法身份 背书,当你以 Facebook 账号登陆某个站点之后,该站点 无权访问 你的在 Facebook 上的 数据。
  • OAuth: 用于 授权(Authorisation),允许 被授权方 访问 授权方 的 用户数据。

Access Token 和 Refresh Token

职责的分离:

  • refresh token: 负责 身份认证;
  • access token: 负责 请求资源。

JWT(JsonWebToken)

JWT 顾名思义,它是 JSON 结构的 token,由三部分组成:

  • header
  • payload
  • signature

header 用于描述 元信息,例如产生 signature 的算法:

{ "typ": "JWT", "alg": "HS256"}

payload 用于携带你希望 向服务端传递的信息。你既可以往里添加 官方字段,例如:iss(Issuer), sub(Subject), exp(Expirationtime),也可以塞入 自定义的字段

{ "userId": "b08f86af-35da-48f2-8fab-cef3904660bd"}

signature 译为 签名,创建签名要分以下几个步骤:

  1. 从 接口服务端 拿到 密钥,假设为 secret。
  2. 对 header 进行 base64 编码,假设结果为 headerStr。
  3. 将 payload 进行 base64 编码,假设结果为 payloadStr。
  4. 将 headerStr 和 payloadStr 用 . 字符 拼装起来成为字符 data。
  5. 以 data 和 secret 作为参数,使用 哈希算法 计算出 签名。
posted @ 2020-10-13 17:58  Nine4酷  阅读(109)  评论(0编辑  收藏  举报