身份验证令牌存储在客户端的哪个位置?

时间:2012-09-06 20:50:54

标签: asp.net-mvc authentication asp.net-web-api

我想在Azure上托管一个MVC 4 Web API项目。我需要确保可以从任何第三方应用程序和任何浏览器访问API。实现一个简单地返回JSON的RESTful API对我来说听起来不错。现在,对我来说最大的挑战是创建一个与平台无关的身份验证机制。我不想使用默认的MembershipProvider。我将使用SSL。我也不会使用FormsAuthentication。所有API调用都将通过JQuery / AJAX。

我正在尝试理解基于令牌的身份验证。这就是我认为我能做到的:   - 客户端通过HTTPS将其用户凭据发送到服务器   - 服务器对客户端进行身份验证,创建令牌,将其与日期时间戳和有效期一起保存到数据库,然后将其发送回客户端   - 客户端每次访问API时都会将令牌发送到服务器

现在,我不明白的部分是,客户端在哪里存储令牌?它是保存在cookie中的吗?如果是这样,非浏览器第三方应用程序在哪里保存身份验证令牌?令牌被盗是多么容易?

2 个答案:

答案 0 :(得分:2)

身份验证令牌由ASP.net成员资格提供程序和身份验证模块存储在cookie中。在客户端,HTTP客户端库可以处理cookie。表单身份验证也可以进行无cookie身份验证。如果频道未加密(ssl或https),则中间人嗅探器可能会盗取令牌。安全的websapps为身份验证cookie设置了一个小超时,以便一小段不活动时间会使会话到期,从而使cookie失效。

但是,对于API身份验证,身份验证机制可能不同。每个呼叫都可以独立验证。因此,无需为客户端维护令牌。每个API调用的Authorization标头应该有一些服务器可以识别的秘密。亚马逊AWS使用这种API身份验证方式,其他许多方式也遵循这种风格。使用webapi,您可以实现此类身份验证。

  1. 客户端具有由服务器发布的帐户的私钥或用户为帐户导​​入服务器的私钥。
  2. 2.客户端照常调用API,但将一些信息放入Authorization标头中。该信息将是与客户的帐户ID和日期混合发送的数据的HMAC。

    以下是HTTP API中的授权标头应如何显示

    Authorization: account-id  HMAC_OF_WITH_SECRET_KEY(data + account-id + GMT Date that will be in date header)
    

    3.在服务器端(WebApi端),您需要为WebApi控制器提供自定义AuthorizeAttribute。这些自定义身份验证将接收来自客户端的请求,并反转客户端所做的事情。服务器具有客户端私钥,它可以在客户端完成时排列数据并再次计算HMAC。如果此HMAC与Authorization标头中发送的HMAC相同,则它是帐户或用户标识的身份验证客户端。请注意,授权标头具有account-id + HMAC密钥。因此,在此标头服务器中使用account-id或user-id可以知道哪个客户端正在请求。

    此机制涵盖身份验证和数据完整性。

答案 1 :(得分:0)

客户端需要将令牌安全地存储在其应用程序空间中。 它可以选择进一步加密令牌。

cookie也是存储令牌的地方,但问题是一些客户端没有cookie的优势。所以想想一般情况。