1

We are creating a prototype application as follows:

  1. We have a html web site using knockoutjs
  2. Using qQuery/Ajax it communicates with Web Api services

We only want the services to be accessed by authorised users. So we have written in security that can validate the user based on username/password

So next I guess we need to pass back some type of token to the client which it uses in further communications with the API services.

What I would like to know is how this is stored on the client so it can be passed back to the server again for the next call?

4

4 回答 4

1

我假设客户端通过 HTTPS 进行初始调用并传入用户名和密码并取回令牌。你的问题是如何存储令牌?我假设您的应用程序是 SPA。如果是这样,为什么不把它存储在一个 JavaScript 变量中呢?如果您不使用 cookie,则可以避免使用 XSRF。当然,您必须确保用户名和密码永远不会存储在客户端,并且您的令牌的生命周期令牌是有限的,并且最好尽可能小。

编辑:

如果您可以在每个页面上重新生成令牌(因为它不是 SPA),那就更好了,并且您可以使令牌的生命周期非常短。您可以使用这样的代码。我使用授权标头和承载方案,但如果不需要标准化,您也可以使用自己的方案。

var accessToken = ''; // Write out the token into this variable in the server side (view)

$.ajax({
    type: 'GET',
    url: 'http://whatever',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    headers: { 'Authorization=': ='Bearer ' + accessToken },
    success: function (data) {
        
    }
});
于 2013-07-05T17:36:16.707 回答
0

我想知道的是如何将其存储在客户端上,以便可以再次将其传递回服务器以进行下一次调用?

饼干。您将令牌作为 cookie 发送,它会在用户请求您的页面时自动发送。

于 2013-07-05T16:02:36.580 回答
0

为曾经授权的 md5(username) md5(password) 创建一个服务器端会话。每个请求生成一个 uuid,并在响应中返回它。基本模型称为令牌交换,即使没有 SSL,它也是可靠的(无中间人)。

于 2015-04-27T11:03:30.073 回答
0

因此,我们编写了可以根据用户名/密码验证用户的安全性

这句话基本上意味着您需要将用户名和密码存储在您的 javascript 文件中以便能够调用该服务,除非您当然想要求用户在他执行的每个操作中输入他的凭据。我希望这不是你现在想做的事情。如果是,那么您可以停止阅读我的答案并将用户名和密码存储在您的 javascript 文件中。

在这个阶段,很明显应该以不同的方式处理您的安全性。您的 Web API 不应受用户名和密码保护,而应受令牌保护。以下是这在实践中的工作方式。您将有一个操作将获取用户名和密码,验证它们,如果成功,它将返回一个令牌。该令牌可以包含加密的用户名。所以你的 javascript 会询问用户他的用户名和密码,调用 Login 方法,它可以存储令牌。然后它将在后续调用中使用此令牌。API 将依次对其进行解密以提取用户名。

于 2013-07-05T15:56:14.237 回答