【问题标题】:how secure credentials in an ajax request to get a token (oauth)如何在 ajax 请求中保护凭证以获取令牌(oauth)
【发布时间】:2015-02-20 17:16:27
【问题描述】:

我正在构建一个通过 OAuth 身份验证机制使用我的 API 的 SPA 应用程序。我的应用程序没有登录视图,因此我通过在相同的代码中写入用户名和密码来获取令牌,方式如下:

$.ajax({
  type: "POST",
  url:  restServer + "/token",
  dataType: 'json',
  // insecure :
  data: {
     grant_type   : 'password',
     scope        : '*',
     username     : 'someuser',
     password     : 'p4sSw0rd'         
  }
})
//...

但显然这是一种不安全的方式,每个人都可以读取用户名和密码。 我试图在stackoverflow等上找到这个问题,但我不明白我该如何解决。

有人说要从服务器获取用户名和密码,但它也有同样的安全问题。 有人提到了https,但在这第一步中没有涉及。

有人有想法吗?

【问题讨论】:

  • 我认为常见的解决方案是对密码进行哈希处理,因为如果您不使用 TLS 连接,无论如何它都可能以纯文本形式传输。您也可以将此问题移至security.stackexchange.com

标签: ajax security asp.net-web-api oauth


【解决方案1】:

您不应在 JavaScript 代码中保留用户名和密码。它们太容易被盗了。

SPA 应用程序应该在 OAuth 2.0 中使用 implicit grant。这意味着在登录时您将客户端重定向到授权服务器进行身份验证。身份验证和授权完成后,授权服务器会将客户端重定向回您的 SPA。生成的访问令牌(JWT 令牌)可用于在后端调用您的 REST API。

当访问令牌过期时,您与授权服务器通信以获取新令牌。为此可能需要用户交互。

【讨论】:

  • 但是我怎么说我没有登录视图,那么我怎样才能获得保护凭据的令牌?
  • 显示登录视图的不是您的应用程序,而是授权服务器。成功验证后返回令牌。
  • 但我不希望用户需要在登录视图中登录,我希望它是自动的,无需用户交互。你有什么想法吗?
  • 那你应该看看 Kerberos 身份验证。但这仅适用于您的域内。 OAuth 支持密码授权,但您无法从 JavaScript 客户端安全地执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 2014-06-14
  • 2018-06-09
  • 2016-04-26
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多