在asp.net Framework 4.0中创建面向会话的API

时间:2014-08-18 05:19:50

标签: asp.net wcf generic-handler

我正在开展一个移动应用程序通过一组API连接到网站的项目。我考虑使用“通用处理程序”创建API。在为敏感数据定义限制之前,这似乎工作正常。用户在请求数据之前必须经过身份验证。

我创建了一个登录API,其中验证了用户凭据,并且在成功验证后,包含他在登录时提供的相同凭据的加密字符串将返回给用户。

每次用户在成功登录后发出请求,都会在标头中将加密的字符串提供回服务器。在服务器端,加密数据使用存储在DB中的凭证进行解密和验证。由于最近验证了用户,因此不需要此步骤。无论如何,我可以避免为每个请求验证用户身份。我打算使用WCF服务,其中Session可以有效地用于实现相同的目标(这是一个好主意吗?)

1 个答案:

答案 0 :(得分:1)

我做了与您的API相同的步骤。以下是我在身份验证部分所做的一些更改。

  1. 客户端将其凭据(用户名和密码)发送到/ api / login
  2. 服务器验证凭据并形成一个加密字符串,其中包含用户标识和一些必要的数据,如失效日期。将此称为令牌。

    var tokenStr =“user_id = 1234; expire_date =”+ DateTime.Now.AddMinutes(20).ToString(); var encToken = AESCryptoService.Encrypt(salt,tokenStr);

  3. 将此加密令牌返回给客户

  4. 客户端在HTTP标头(X-App-Token)中设置此标记以进行未来的API调用。
  5. 服务器检测并解密此令牌。如果用盐解密,你可以信任这个令牌。获取user_id并设置当前线程主体并继续执行请求。
  6. 如果令牌过期(读取expire_date),则返回401身份验证请求,以便客户端可以再次请求令牌。
  7. 您还可以使用SHA-1或MD5或某些签名/加密机制来确保除了您之外不能更改令牌字符串。