Skip to content

Latest commit

 

History

History
63 lines (59 loc) · 1.71 KB

auth.md

File metadata and controls

63 lines (59 loc) · 1.71 KB

认证与授权

认证 - Authentication - Authn

  • 采用基础认证 + 令牌认证
    • 基础认证: 用户名+密码
    • 令牌认证: JWT JWT认证流程

JWT

  • Json Web Token
  • 由三部分组成: Header, Payload, Signature
  • 一个示例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MjgwMTY5MjIsImlkIjowLCJuYmYiOjE1MjgwMTY5MjIsInVzZXJuYW1lIjoiYWRtaW4ifQ.LjxrK9DuAwAzUD8-9v43NzWBN7HXsSLfebw92DKd1JQ
  • Header
    • 由两部分组成:
      • Token 的类型
      • Token 采用的加密算法
    • 例如:
{
  "typ": "JWT",
  "alg": "HS256"
}
  • Payload
    • 由多个键值对组成
      • iss: 签发者
      • sub: 主题
      • aud: 受众
      • exp: 过期时间
      • nbf: 生效时间
      • iat: 签发时间
      • jti: 唯一身份标识
      • 自定义键值对
    • 例如:
{
  "id": 2,
  "username": "daz",
  "nbf": 1527931805,
  "iat": 1527931805
}
  • Signature
    • 生成方式:
      • 用 Base64 对 Header 和 Payload 进行编码
      • 用 Secret 对编码后的 Header 和 Payload 进行加密, 生成 Signature
    • Secret 相当于一个私钥, 只有服务端知道
      • dBlog 将其存放于 config/dazBlog.yaml 中

认证流程

  • token 签发以及解析密钥
  • Authn 中间件进行认证
  • 基于以上实现 POST /login 以及 PUT /v1/users/:name/change-password 接口
    • POST 用于创建
    • PUT 用于更新,是一个幂等操作

授权 - Authorization - Authz

  • 使用 ACL (Access Control List) 模型进行授权
  • TODO: 实现使用 RBAC (Role-Based Access Control) 模型进行授权