跳转到主要内容

JWT令牌身份验证。

项目描述

Beta License: LGPL-3 OCA/server-auth Translate me on Weblate Try me on Runboat

JWT令牌身份验证。

目录

安装

此模块需要安装pyjwt库。

用法

此模块允许开发者在Odoo控制器路由上添加一个新的jwt身份验证方法。

要使用它,您必须

  • 创建一个auth.jwt.validator记录来配置JWT令牌的验证方式。

  • auth="jwt_{validator-name}"auth="public_or_jwt_{validator-name}"属性添加到您想要保护的路由中,其中{validator-name}对应于JWT验证记录的名称属性。

auth_jwt_demo模块提供了示例。

JWT验证器可以使用以下属性进行配置

  • name: 验证器名称,以匹配auth="jwt_{validator-name}"路由属性。

  • audience: 允许的受众列表,用逗号分隔,用于验证aud声明。

  • issuer: 用于验证iss声明。

  • 签名类型(秘密或公钥)、算法、秘密和JWK URI用于验证令牌签名。

此外,还会验证exp声明以拒绝过期的令牌。

如果缺少、格式不正确或包含无效令牌的Authorization HTTP头,则请求将以401(未经授权)代码拒绝,除非启用cookie模式(见下文)。

如果令牌有效,则请求将使用配置的用户 ID 执行。默认的用户 ID 选择策略是静态的(即对所有请求都相同),并且选定的用户在 JWT 验证器中配置。可以通过覆盖_get_uid()方法并扩展user_id_strategy选择字段来提供其他策略。

选定的用户不会存储在会话中。它仅在request.uid中可用(因此它是用于request.env的)。为了避免令牌和会话之间的任何混淆和匹配错误,此模块拒绝使用经过身份验证的用户会话发出的请求。

此外,如果配置了partner_id_strategy,则将搜索合作伙伴,如果找到,则将其 ID 存储在request.jwt_partner_id属性中。如果设置了partner_id_required,则在找不到合作伙伴时返回 401(未经授权)。否则,request.jwt_partner_id为假。可以通过覆盖_get_partner_id()方法并扩展partner_id_strategy选择字段来提供其他策略。

解码的 JWT 有效负载存储在request.jwt_payload中。

public_auth_jwt方法在未设置授权头时将身份验证委托给标准的 Odoo public方法。如果设置了,则按上述方式执行常规 JWT 身份验证。此方法对于需要为匿名用户工作的公开端点很有用,但可以在知道经过身份验证的用户时进行增强。一个典型的用例是“添加到购物车”端点,它可以用于匿名用户,但可以在知道经过身份验证的用户时通过将购物车绑定到已知的客户来增强。

您可以在 JWT 验证器上启用 Cookie 模式。在这种情况下,从Authorization头中获得的 JWT 有效负载作为 Http-Only cookie 返回。对于不需要在请求之间存储和保护 JWT 令牌的前端应用程序,此模式有时更简单,它们可以仅依赖于浏览器中 cookie 的管理机制。当同时提供Authorization头和 cookie 时,将忽略 cookie,以便客户端可以通过提供新的 JWT 令牌以不同的用户进行身份验证。

错误追踪器

错误在GitHub Issues上跟踪。如果在出现问题时,请检查您的问题是否已经报告。如果您是第一个发现它的,请通过提供详细且受欢迎的反馈来帮助我们将其消除。

请勿直接联系贡献者以获取支持或帮助解决技术问题。

贡献者

作者

  • ACSONE SA/NV

贡献者

维护者

此模块由 OCA 维护。

Odoo Community Association

OCA,即 Odoo 社区协会,是一个非营利组织,其使命是支持 Odoo 功能的协作开发并推广其广泛使用。

当前 维护者

sbidoul

此模块是 GitHub 上的 OCA/server-auth 项目的一部分。

欢迎您做出贡献。要了解如何进行,请访问https://odoo-community.org/page/Contribute

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

此版本中没有可用的源代码分发文件。请参阅关于生成分发归档的教程。

构建的分发版本

odoo_addon_auth_jwt-16.0.1.1.0.7-py3-none-any.whl (42.8 kB 查看哈希值)

上传时间 Python 3