跳转到主要内容

JWT携带令牌认证。

项目描述

Beta License: AGPL-3 OCA/server-auth Translate me on Weblate Try me on Runbot

JWT携带令牌认证。

目录

安装

此模块需要安装pyjwt库。

使用

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

要使用它,您必须

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

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

auth_jwt_demo模块提供了示例。

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

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

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

  • issuer:用于验证iss声明。

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

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

如果HTTP头中的 Authorization 缺失、格式不正确或包含无效令牌,则请求会被拒绝,返回401 (未授权) 状态码。

如果令牌有效,请求将使用配置的用户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 方法在未设置Authorization头时将身份验证委托给标准的Odoo public 方法。如果设置了,则执行上述描述的常规JWT身份验证。此方法对于需要为匿名用户工作的公开端点非常有用,但在知道已验证用户时可以进行增强。一个典型的用例是“添加到购物车”端点,它可以用于匿名用户,但在知道已验证用户时可以绑定到已知的客户。

已知问题/路线图

在Odoo 14.0之前,CORS支持存在问题。这意味着 auth_jwt_demo 中的演示SPA不能直接使用。要使其工作,您需要从与Odoo相同的URL提供服务,或者回滚 https://github.com/odoo/odoo/pull/56029

也可以通过检测CORS预检请求并在此情况下不要求身份验证来在 auth_jwt 中解决这个问题。

这留待未来工作,因为我的当前重点是Odoo 14.0。

错误跟踪器

问题在 GitHub Issues 中跟踪。如果在遇到麻烦时,请检查您的错误是否已经被报告。如果您首先发现它,请通过提供详细且受欢迎的 反馈 来帮助我们消除它。

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

致谢

作者

  • ACSONE SA/NV

贡献者

维护者

此模块由OCA维护。

Odoo Community Association

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

当前 维护者

sbidoul

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

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

项目详情


下载文件

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

源代码分发

此发行版没有可用的源代码分发文件。请参阅生成分发存档的教程。

构建分发

odoo13_addon_auth_jwt-13.0.1.1.0-py3-none-any.whl (34.8 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面