如何在ajax请求中保护凭据以获取令牌(oauth)

如何在ajax请求中保护凭据以获取令牌(oauth),ajax,security,asp.net-web-api,oauth,Ajax,Security,Asp.net Web Api,Oauth,我正在构建一个SPA应用程序,它通过OAuth身份验证机制使用我的API。我的应用程序没有登录视图,因此我通过在相同的代码中写入用户名和密码来获取令牌,方法如下: $.ajax({ type: "POST", url: restServer + "/token", dataType: 'json', // insecure : data: { grant_type : 'password', scope : '*', user

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

$.ajax({
  type: "POST",
  url:  restServer + "/token",
  dataType: 'json',
  // insecure :
  data: {
     grant_type   : 'password',
     scope        : '*',
     username     : 'someuser',
     password     : 'p4sSw0rd'         
  }
})
//...
但显然这是一种不安全的方式,每个人都可以读取用户名和密码。 我试图在stackoverflow等网站上找到这个问题,但我不知道如何解决它

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


有人有想法吗?

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

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


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

我认为常见的解决方案是散列密码,因为如果不使用TLS连接,密码可能会以纯文本传输。您也可以将此问题移至。但我是如何说我没有登录视图的,那么我如何才能获得用于保护凭据的令牌?显示登录视图的不是您的应用程序,而是授权服务器。它在成功身份验证时返回令牌。但我不希望用户需要在登录视图中登录,我希望它是自动的,并且没有用户交互。你有什么想法吗?那么你应该看看Kerberos身份验证。但这只会在你的领域内起作用。OAuth支持密码授予,但您无法从JavaScript客户端安全地执行此操作。