如何在 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。因此,我们需要强制用户重新验证才能编辑他们的设置。
我们的思路是,当用户尝试进入设置页面时:
该应用要求用户使用密码重新进行身份验证。
作为响应,API 将令牌发回应用程序。令牌代表一些只有 API 知道的秘密,加上用户 ID,加上不久的将来的到期时间戳。
所有与用户设置相关的 API 调用都需要在请求中发送有效令牌。
API 验证令牌是为同一用户颁发的,并检查时间戳是否仍然有效。
如果 API 发现令牌无效或已过期,它会响应一个信号,表明 UI 应该让用户重新验证以获得继续之前的新标记。
这一切都必须存在于现有的 ServiceStack cookie 身份验证之外/与现有的 ServiceStack cookie 身份验证一起存在(由于各种原因,我们当前的身份验证层的修改超出了范围和时间线)。
在 ServiceStack 中实现这种额外安全级别的最佳实践是什么?
您可能需要查看 WebSudoFeature Plugin,它允许受特权保护的服务强制用户必须重新验证才能访问带有 [WebSudoRequired]
注释的服务。
至于过期令牌,我将其作为单独的应用层安全功能实现,作为请求 DTO 属性 传递到您的服务中,而不是尝试将其与 ServiceStack 的顶级身份验证集成。
对于它的实现,您可以 create a JWT Token manually 您可以在您的应用程序中对其进行验证,或者您可以生成一个带有 UUID/Guid PK 的数据库条目,其中包含到期时间,因为您可能希望这样做来维护审计信息(例如 time/IP)当使用这些 PIN 授权令牌而不是使用没有任何审计历史的无状态令牌时。
我们有一个带有基于 ServiceStack 的 cookie 身份验证的移动应用程序。该应用程序存储用户的登录 cookie,并在用户需要时保持登录状态。
我们在应用程序中有一个 'Purchase PIN' 功能 - 用户可以设置 PIN 码,并要求在每次购买时输入 PIN 码。目的是防止购买被盗或未锁定的物品 phone。
该应用程序有一个 settings/configuration 视图,用户可以在其中设置、打开和关闭购买 PIN。因此,我们需要强制用户重新验证才能编辑他们的设置。
我们的思路是,当用户尝试进入设置页面时:
该应用要求用户使用密码重新进行身份验证。
作为响应,API 将令牌发回应用程序。令牌代表一些只有 API 知道的秘密,加上用户 ID,加上不久的将来的到期时间戳。
所有与用户设置相关的 API 调用都需要在请求中发送有效令牌。
API 验证令牌是为同一用户颁发的,并检查时间戳是否仍然有效。
如果 API 发现令牌无效或已过期,它会响应一个信号,表明 UI 应该让用户重新验证以获得继续之前的新标记。
这一切都必须存在于现有的 ServiceStack cookie 身份验证之外/与现有的 ServiceStack cookie 身份验证一起存在(由于各种原因,我们当前的身份验证层的修改超出了范围和时间线)。
在 ServiceStack 中实现这种额外安全级别的最佳实践是什么?
您可能需要查看 WebSudoFeature Plugin,它允许受特权保护的服务强制用户必须重新验证才能访问带有 [WebSudoRequired]
注释的服务。
至于过期令牌,我将其作为单独的应用层安全功能实现,作为请求 DTO 属性 传递到您的服务中,而不是尝试将其与 ServiceStack 的顶级身份验证集成。
对于它的实现,您可以 create a JWT Token manually 您可以在您的应用程序中对其进行验证,或者您可以生成一个带有 UUID/Guid PK 的数据库条目,其中包含到期时间,因为您可能希望这样做来维护审计信息(例如 time/IP)当使用这些 PIN 授权令牌而不是使用没有任何审计历史的无状态令牌时。