在呼叫之间保留安全令牌

时间:2013-07-05 14:34:42

标签: javascript ajax asp.net-web-api

我们正在创建一个原型应用程序,如下所示:

  1. 我们有一个使用knockoutjs的html网站
  2. 使用qQuery / Ajax,它与Web Api服务进行通信
  3. 我们只希望授权用户访问这些服务。因此,我们编写了安全性,可以根据用户名/密码验证用户

    接下来我想我们需要将某种类型的令牌传回给客户端,它在与API服务的进一步通信中使用它。

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

4 个答案:

答案 0 :(得分:1)

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

编辑:

如果您可以为每个页面重新生成令牌(因为它不是SPA),那么它甚至更好,您可以使令牌的生命周期非常小。你可以使用这样的代码。我使用Authorization标头和bearer方案,但如果不需要标准化,您也可以使用自己的方案。

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) {

    }
});

答案 1 :(得分:0)

  

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

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

在这个阶段,您的安全性应该以不同的方式处理。您的Web API不应受用户名和密码的保护,而应受令牌的保护。以下是这在实践中如何发挥作用。您将拥有一个将采用用户名和密码的操作,验证它们,如果成功,它将返回一个令牌。此令牌可能包含加密的用户名。因此,您的javascript将询问用户他的用户名和密码,调用Login方法,它可以存储令牌。然后它将在后续调用中使用此标记。 API将依次解密它以提取用户名。

答案 2 :(得分:0)

  

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

缓存数据。您将把令牌作为cookie发送,并在用户请求您的页面时自动发送。

答案 3 :(得分:0)

为曾经授权的md5(用户名)md5(密码)创建服务器端会话。 每个请求生成一个uuid,并在响应中返回它。 基本模型称为令牌交换,即使没有SSL,它也是可靠的(没有m.i.t.m)。

相关问题