mittwald-flow / jwt-auth
使用 JSON Web Tokens 验证用户
Requires
- firebase/php-jwt: ~3.0
- typo3/flow: *
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 公钥。要配置此密钥,您可以使用以下设置之一
-
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-----
-
Mw.JwtAuth.security.keyUrl
指定一个可以从其中检索密钥的fopen
-可访问的 URLMw: 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
此设置可以包含多个令牌来源的列表。将按顺序尝试这些来源,直到匹配其中一个为止。