【问题标题】:ASP.NET Web API - Authenticated Encrypted JWT Token - Do I need OAuth?ASP.NET Web API - 经过身份验证的加密 JWT 令牌 - 我需要 OAuth 吗?
【发布时间】:2013-05-30 23:43:07
【问题描述】:

我正在考虑使用经过身份验证的加密 JWT 令牌来验证/授权对 ASP.NET Web API 应用程序的访问。

根据我目前所读到的内容,在我看来,这是一种从令牌服务生成 JWT 令牌并通过 http 授权标头将它们传递给 Web API 的选项。

我找到了一些关于实现 JWT 创建和消费的好代码示例(Pro ASP.NET Web API Security by Badrinarayanan Lakshmiraghavan)。

我正在尝试了解我是否需要完整的 OAuth 实现来支持这一点,或者我是否可以简单地在 auth 标头中传递令牌。

假设令牌已正确加密和签名,在不使用 OAuth 的情况下保持简单,是否存在任何固有的安全漏洞?

在不影响安全性的情况下,尽量让事情变得简单以满足我的需要。

【问题讨论】:

标签: asp.net-web-api oauth-2.0 jwt


【解决方案1】:

并不是说您在使用令牌时必须始终进行 OAuth。但鉴于您的应用程序是一个 JavaScript 应用程序,您最好实现三足身份验证。 Thinktecture 身份服务器确实支持implicit grant。但是,如果客户端应用程序访问用户凭证对您来说不是问题,那么您的 JavaScript 应用程序可以从用户那里获取用户 ID 和密码,并从令牌颁发者发出令牌请求,以确保用户 ID 和密码不被存储任何在 JavaScript 应用程序(包括 DOM)中的位置。此令牌请求也可以是简单的 HTTP POST,并且不需要与 OAuth 相关的任何内容。如果您的最终用户不会在客户端应用程序中输入凭据,则可以使用 OAuth 隐式授权。顺便说一句,您不需要加密 JWT。 TIS 发出签名的 JWT,这将确保令牌的完整性。但是如果您担心机密性,您可以使用 HTTPS 来获取令牌以及呈现令牌。

【讨论】:

  • 谢谢。这就是我需要的信息。顺便说一句,你的书很棒。一直是了解 Web API 安全选项/问题的关键资源。
  • 谢谢。除了本书,请参考 Dominick 的博客leastprivilege.com。它有很多关于安全主题的信息,特别是 ASP.NET Web API。
  • 您能否指导如何正确加密 ASP.Net MVC 5 中的 JWT 令牌?还请澄清加密的 JWT 是指 JWT 中的加密有效负载吗?
【解决方案2】:

看起来您并不真正需要 OAuth 提供的授权委托。 HMAC 身份验证对您的场景来说还不够吗?使用 HMAC,您根本不必处理 JWT。这是我为 .NET 进行的 HMAC 身份验证的实现

https://github.com/pcibraro/hawknet

巴勃罗。

【讨论】:

  • 我对 HMAC 身份验证知之甚少,无法回答。这适用于 Javascript 客户端应用程序吗?
  • 嗯,不,JWT 可能是您更好的选择,但您也无法在 javascript 中生成它。您需要一个服务器来为您生成令牌。
  • 我想我的问题是我是否可以创建一个简单的 JWT 令牌服务器,我的 javascript 应用程序可以从中请求令牌,然后只需将 Authorization 标头中的这个令牌传递给我的 web api,而不必担心与其他 OAuth 详细信息。
  • 简单是相对的。 JS 应用程序(或者更确切地说是用户)显然需要进行身份验证才能请求令牌。然后需要生成令牌。现在没有进行加密的 JWT 的 .NET 实现。我想知道你是否需要它 - 签名应该没问题。看看github.com/thinktecture/Thinktecture.IdentityServer.v2/wiki
猜你喜欢
  • 2017-07-30
  • 2019-04-20
  • 2017-03-09
  • 2016-01-02
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多