【问题标题】:Questions on OAuth 2 server in ASP.NET Web Api关于 ASP.NET Web Api 中 OAuth 2 服务器的问题
【发布时间】:2016-10-30 00:22:58
【问题描述】:

目前,我认为我对 OAuth 的理解以及它在 ASP.NET Web Api 中的实现方式存在缺陷。

1) 我一直看到将 OAuth 描述为服务器(即 OAuth 服务器)。 Microsoft 的 OAuth 实现是具有不同端口的单独服务器,还是仅称为服务器,即使它自包含在 API 项目中?

2) OWIN 与 OAuth 是分开的,还是两者相互关联,必须一起使用?

3) OAuth v2 服务器如何跟踪已撤销或过期的令牌? OAuth 组件是否有一个数据库来跟踪它发出的令牌?如果有,它是什么类型的数据库?

我一直在阅读 Taiseer Joudeh from bitoftech.net 的教程,但我认为我缺少一些基础知识。

【问题讨论】:

    标签: oauth-2.0 asp.net-web-api2


    【解决方案1】:

    以下是我的回复:

    1. 您可以将服务器实现为独立的授权服务器,也可以与资源服务器一起实现。 Visual Studio 模板将两个服务器放在一起,但您可以将它们分开。 Taiseer Joudeh 的教程会很好地指导你,他们在我的例子中做到了。

    2. OAuth 2.0 是一个授权框架,如其definition document 所述。 OWIN 代表 .NET 的开放式 Web 界面。两者是不同的东西,但微软决定使用 OWIN 中间件架构来实现 OAuth 2.0 协议。那么在 ASP.NET 中开发 OAuth 2.0 服务器最简单的方法就是使用微软实现的Microsoft.Owin.Security.* 库。

    3. OAuth 2.0 协议没有讨论跟踪过期或撤销的令牌,您可以根据需要实现,但只有在授权和资源服务器相同的情况下才可以这样做,然后您需要访问数据库来检查每个请求的令牌,这是没有必要的。如果资源服务器与授权服务器分离,则它无法直接访问授权服务器数据库。通常你不会那样做。令牌的过期检查是 Microsoft.Owin.Security.OAuth 库为您做的。如果资源服务器收到的令牌已过期,则库会以 401 - Unauthorized 响应进行响应。 为了使资源服务器可以解密令牌,您只需在两个服务器的 web.config 文件中设置相同的机器密钥。 为避免长期访问令牌,您可以设置较短的访问令牌时间跨度并实施刷新令牌。在这种情况下,您可以将刷新令牌保存在数据库中,并且您可以实现一些方法来撤销它们。 刷新令牌及其撤销也在 Taiseer Joudeh 博客文章中实现。

    我希望我的解释清楚,可以帮助你。如果您还有其他疑问,请告诉我。

    【讨论】:

    • 这些很有帮助。谢谢
    • 所以我认为我完全高估了 OAuth 服务器在做什么你是说刷新令牌不是由中间件自动生成的,而是我们作为开发人员必须注意存储原始令牌然后发送刷新令牌?
    • 是的,我是。正如OAuthAuthorizationServerOptions.RefreshTokenProvider 属性文档中所说,如果未提供授权服务器将不会返回刷新令牌
    • OAuth 2.0 协议定义中所述发布refresh token 是可选的,由授权服务器自行决定。如果授权服务器发出刷新令牌,则在发出访问令牌时会包含它,而对于访问令牌,您可以将其存储在数据库中,或者在收到时直接解密并使用其中包含的信息。 Taiseer Joudeh 实现刷新令牌的方式允许授权服务器管理员在出于任何原因需要时使刷新令牌无效。
    • 非常感谢 Jamuro!
    猜你喜欢
    • 2013-10-14
    • 2012-01-29
    • 1970-01-01
    • 2023-01-04
    • 2011-10-19
    • 1970-01-01
    • 2016-06-06
    • 2014-12-07
    • 2014-07-21
    相关资源
    最近更新 更多