如何在 ServiceStack 中实现额外的基于过期令牌的授权层?

How can I implement an additional layer of expiring-token-based authorisation in ServiceStack?

我们有一个带有基于 ServiceStack 的 cookie 身份验证的移动应用程序。该应用程序存储用户的登录 cookie,并在用户需要时保持登录状态。

我们在应用程序中有一个 'Purchase PIN' 功能 - 用户可以设置 PIN 码,并要求在每次购买时输入 PIN 码。目的是防止购买被盗或未锁定的物品 phone。

该应用程序有一个 settings/configuration 视图,用户可以在其中设置、打开和关闭购买 PIN。因此,我们需要强制用户重新验证才能编辑他们的设置。

我们的思路是,当用户尝试进入设置页面时:

这一切都必须存在于现有的 ServiceStack cookie 身份验证之外/与现有的 ServiceStack cookie 身份验证一起存在(由于各种原因,我们当前的身份验证层的修改超出了范围和时间线)。

在 ServiceStack 中实现这种额外安全级别的最佳实践是什么?

您可能需要查看 WebSudoFeature Plugin,它允许受特权保护的服务强制用户必须重新验证才能访问带有 [WebSudoRequired] 注释的服务。

至于过期令牌,我将其作为单独的应用层安全功能实现,作为请求 DTO 属性 传递到您的服务中,而不是尝试将其与 ServiceStack 的顶级身份验证集成。

对于它的实现,您可以 create a JWT Token manually 您可以在您的应用程序中对其进行验证,或者您可以生成一个带有 UUID/Guid PK 的数据库条目,其中包含到期时间,因为您可能希望这样做来维护审计信息(例如 time/IP)当使用这些 PIN 授权令牌而不是使用没有任何审计历史的无状态令牌时。