【问题标题】:Under the covers, how are RefreshTokens kept track of? (ASP.NET Owin/OAuth2)在幕后,RefreshTokens 是如何跟踪的? (ASP.NET Owin/OAuth2)
【发布时间】:2019-11-28 11:25:22
【问题描述】:

即使我们停止 API 或关闭整个机器,恢复它仍然会跟踪已发布给客户端的刷新令牌。这是如何实现的?

【问题讨论】:

    标签: asp.net security oauth-2.0 authorization owin


    【解决方案1】:

    刷新令牌通常由授权服务器存储在数据库中。

    移动 UI 客户端将它们存储在操作系统安全存储中也很常见。

    服务器端 Web 应用程序也很常见将刷新令牌包含在身份验证 cookie 中,以便它在请求之间保持可用。

    您的 API 应该只接收访问令牌 - 并且不应该知道任何有关刷新令牌的信息。

    我需要更多地了解您的具体情况才能提供进一步的建议。

    【讨论】:

    • 这是一个简单的 ASP.NET 项目,我认为它自己使用 OWIN 实现了 OAuth2? (我定义了OAuthAuthorizationServerOptions 并将定义的对象传递给app.UseOAuthAuthorizationServer(app 是IAppBuilder 对象,在每个ASP.NET 应用程序的Configuration 方法内。
    • 我已经实现了我需要的部分,这不是一个完整的重新实现。在我的代码中,我没有实现令牌处理方式的逻辑。是的,我有一个保存它们的存储库,但这不是跟踪它们的实际 ASP.NET 事物的主干。为什么?如下图:您拥有完全相同的 ASP.NET 应用程序。我在您的实例上验证了自己,一切都很好 - 该令牌已保存到数据库中。如果我获得该刷新令牌(来自 db)并从应用程序的 my PC 实例上的令牌端点请求新的访问令牌 - 将返回 invalid_grant。
    • 为什么会这样?因为显然您的 ASP.NET 项目/应用程序生成的刷新令牌仅对您的 应用程序有效。就好像从不同的授权服务器/应用程序(例如 Microsoft)传递刷新令牌,并期望它返回任何声明/信息。所有这些都意味着应用程序在某个地方以某种方式将这些刷新令牌存储为参考,在内部而不是在内存方面,因为即使计算机关闭,它仍然会跟踪它们。有什么想法吗?
    • 啊-我明白了-现在了解您的情况-感觉后端默认情况下不会使用数据库存储。 API 客户端是谁?感觉就像一个 cookie 问题 - 身份验证服务器可能只是检查 cookie 加密 + 过期,然后根据 cookie 数据将其视为受信任的刷新令牌。
    • ASP.NET 是 API 客户端,如果这就是您的意思(它实际上只是一个 API,没有附加的 Web 服务器——身份验证是通过资源所有者密码凭据授予完成的)。此外,我相信它与 cookie 无关,因为使用 Postman 发送带有新访问令牌(具有给定刷新令牌)所需的键值对的请求是有效的,无需任何额外的 cookie 或上下文。这就是我如何理解这些刷新令牌的“特殊性”——由我的 API 生成的令牌工作,而其他来自同一 API 但托管在不同机器上的令牌却没有。
    猜你喜欢
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2010-09-21
    • 2016-02-03
    • 1970-01-01
    相关资源
    最近更新 更多