mittwald-flow / jwt-auth

此包已被弃用且不再维护。未建议替代包。

使用 JSON Web Tokens 验证用户

安装: 38

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 5

分支: 1

开放问题: 0

类型:typo3-flow-package

dev-master 2015-09-04 08:29 UTC

This package is auto-updated.

Last update: 2024-03-12 21:39:33 UTC


README

作者和版权

Martin Helmich
Mittwald CM Service GmbH & Co. KG

此包遵循 MIT 许可

概述

此包实现了 TYPO3 Flow 的身份验证提供程序,该程序基于 JSON Web Tokens 验证用户。JWT 可以使用可配置的自定义 HTTP 标头(默认为 X-JWT)、cookie 或查询参数提供。

安装

您可以使用 Composer 安装此包

$ composer require mittwald-flow/jwt-auth

基本考虑和设计选择

  • 此包仅进行 身份验证。它不会颁发新令牌。此包的唯一目的是通过由可信的第三方身份提供者颁发的 JSON Web Tokens 验证用户。

  • JWT 验证是无状态的。这意味着在使用 JWT 验证时,Flow 不会启动任何类型的会话,而是根据访问令牌重新验证您。

  • 此包验证的帐户不是持久的。这是故意为之,因为当同一用户使用不同的令牌进行验证时,用户的声明可能会更改。

配置

您需要在 TYPO3 Flow 设置中配置一些设置。

验证密钥

此包需要一个密钥来验证令牌。这可以是用于使用对称认证代码(HMAC)的令牌的随机字符字符串,或 RSA 公钥。要配置此密钥,您可以使用以下设置之一

  1. Mw.JwtAuth.security.key 直接指定密钥

    Mw:
      JwtAuth:
        security:
          key: |
            -----BEGIN PUBLIC KEY-----
            MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuurXQ9FbDxK9EQL9gw/f
            KJVdo/33j8zDOxemH6fV/KWp/fEMwez77GC3J5ze/A1o/ue4FVz/8fJ8PMGO3ag9
            drIHyWgs4FYBpQZ1BqA78b6nWJeJ8Zbsv71r+Bpb5UUJBBHZ85Sa13sl3ZN0L0E0
            XD/NYD1Sh31qoccZU57l6g4PWScxUZYGWc/OeT07HbUjaFzL/YpQZUKH+KoqoIOD
            UiZkf44ear4dGzNeR0UQ01VIZj7RaJ1uhAZVsNLoqPKGyjmgEZz70DDbMlxEXiMi
            Q/2Thd3bklr0IpZpL7JwHw9MrVS32NkustFgG6uYv/mvw10Zll9CCAUib3QIGlZV
            uQIDAQAB
            -----END PUBLIC KEY-----
  2. Mw.JwtAuth.security.keyUrl 指定一个可以从其中检索密钥的 fopen-可访问的 URL

    Mw:
      JwtAuth:
        security:
          keyUrl: https://identity.service.consul/key

当您指定这两个设置时,Mw.JwtAuth.security.key 设置将具有优先级。

声明到帐户映射

您还可以配置 JWT 中编码的声明如何映射到 TYPO3 Flow 用户帐户。例如,当 JWT 声明包含描述用户类型的字段时,您可以将此映射到 TYPO3 Flow 角色。

考虑以下 JWT 声明

{
    "sub": "my-username",
    "type": "customer"
}

默认情况下,sub 声明将用作 Flow 用户的帐户标识符。您可以通过设置 Mw.JwtAuth.claimMapping.accountIdentifierField 选项来更改此设置。

此外,您还可以配置包含用户角色的声明以及如何将声明值映射到已知用户角色

Mw:
  JwtAuth:
    claimMapping:
      roleField: type
      roles:
        customer: My.ExamplePackage:Customer
        employee: My.ExamplePackage:Employee

令牌来源

您还可以配置身份验证提供者应如何从 HTTP 请求中提取 JWT。JWT 可以包含在 cookie、自定义请求标头或查询参数中。您可以使用 Mw.JwtAuth.security.tokenSources 配置令牌来源

Mw:
  JwtAuth:
    security:
      tokenSources:
        - from: header
          name: X-Your-Custom-Header
        - from: cookie
          name: MyCookieName

此设置可以包含多个令牌来源的列表。将按顺序尝试这些来源,直到匹配其中一个为止。