【问题标题】:Token-based access to resource without Identity & User Accounts没有身份和用户帐户的基于令牌的资源访问
【发布时间】:2023-03-09 01:47:01
【问题描述】:

我的问题: 我的应用程序有许多页面/资源应该由 guest 用户访问,但只有在提供正确的一对 [Resource Code - Unique Token] 之后(每个页面都有一个页面代码和多个唯一的“令牌”为每个用户)。令牌预先生成并存储在数据库中。访问页面后,用户将能够与属于特定页面的多个其他资源进行交互。

到目前为止我是如何组织的: 页面要求用户提供令牌并与数据库中的记录进行检查。如果这是请求资源的正确令牌,它会写入 cookie,然后,每次用户与资源或其内容交互时,控制器将每次读取 cookie 并检查 [PageCode-Token] 与数据库的配对在继续操作之前。

问题: 还有其他更优雅、更有效的方法吗?我应该改用 Session 吗?每次查询数据库我都觉得有点糟糕。

【问题讨论】:

    标签: c# asp.net-core cookies token


    【解决方案1】:

    这取决于有多少用户访问您的服务,如果容量太大,建议创建一个缓存来存储所有令牌,从而避免数据库过载。但是,如果该服务未被广泛使用,则没有必要这样做,因为数据库可以处理大量请求。

    您可以通过两种方式创建缓存,使用现成的软件或在项目本身中创建一个小缓存。

    如果你选择使用软件,我会推荐Redis,它是一个缓存数据库,存储有或没有超时的值,即一段时间后令牌被删除。 请记住,这不会阻止您向数据库发出请求,但您总是会先向缓存(Redis)发出请求,如果该值不存在,则需要在数据库中进行搜索。

    但如果您选择创建自己的,您将需要手动完成大部分操作,并且始终知道可以分配多少资源。使用软件可能比重新发明石头更有优势。

    【讨论】:

    • Yoi 可以向用户颁发 jwt 令牌,其中包含可供用户使用的资源。然后在服务器端检查该令牌中的可用资源给用户,并根据令牌中的信息显示或拒绝访问。在这种情况下,您根本不需要触发 db。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2012-06-11
    • 2023-04-10
    • 2019-12-24
    • 1970-01-01
    • 2017-07-26
    • 2012-05-27
    相关资源
    最近更新 更多