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

Mar*_*426 5 authentication asp.net-mvc asp.net-web-api

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

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

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

Abh*_*t_K 2

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

然而,对于 API 身份验证,身份验证机制可能有所不同。每个呼叫都可以独立验证。所以不需要为客户端维护token。每个 API 调用的授权标头应该有一些服务器可以识别的秘密。Amazon AWS 使用这种 API 身份验证风格,许多其他公司也遵循这种风格。使用 webapi 你可以实现这种身份验证。

  1. 客户端拥有服务器为其帐户颁发的私钥或由用户导入到服务器中的帐户私钥。

2.客户端照常调用API,但将一些信息放入Authorization标头中。该信息将是发送的数据的 HMAC 与客户端的帐户 ID 和日期混合。

HTTP API 中的授权标头应如下所示

Authorization: account-id  HMAC_OF_WITH_SECRET_KEY(data + account-id + GMT Date that will be in date header)
Run Code Online (Sandbox Code Playgroud)

3.在服务器端(WebApi 端),您需要为 WebApi 控制器自定义 AuthorizeAttribute。这些自定义身份验证将接收来自客户端的请求并执行与客户端所做的相反的操作。服务器拥有客户端私钥,它可以按照客户端的方式排列数据并再次计算 HMAC。如果此 HMAC 与授权标头中发送的 HMAC 相同,则它是对帐户或用户 ID 进行身份验证的客户端。请注意,授权标头包含 account-id + HMAC 密钥。因此使用此标头服务器中的 account-id 或 user-id 可以知道哪个客户端正在请求。

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