相关疑难解决方法(0)

REST Web服务身份验证令牌实现

我正在使用C#实现REST Web服务,该服务将作为云服务托管在Azure上.由于它是REST服务,因此它是无状态的,因此没有cookie或会话状态.

只能通过HTTPS(StartSSL.com提供的证书)访问Web服务.

用户成功登录服务后,将获得安全令牌.此令牌将在将来的通信中提供身份验证.

令牌将包含客户端的时间戳,用户ID和IP地址.

所有通信都只通过HTTPS进行,因此我不担心在重放攻击中被拦截和使用的令牌; 无论如何,令牌将有一个到期日.

由于这是面向公众的服务,我担心有人可以注册服务,登录然后修改他们收到的令牌以访问其他用户的帐户.

我想知道如何最好地保护令牌的内容并验证它没有被篡改.

我计划执行以下操作来保护令牌:

客户端成功登录服务,服务执行:

  1. 生成随机值并使用SHA256哈希值1000次.
  2. 从私钥+散列随机值生成一次性会话密钥.
  3. 使用SHA256对会话密钥进行1000次散列,然后使用它来加密令牌
  4. 使用私钥使用RSA对加密令牌进行签名.
  5. 将加密的令牌+签名+散列随机值发送到未加密的JSON包中的客户端.

当客户端调用服务时,它会将未加密的JSON包中的加​​密令牌和签名发送到服务.服务会

  1. 从私钥+散列随机值重新创建会话密钥
  2. 使用私钥验证签名
  3. 使用散列会话密钥解密令牌
  4. 检查令牌是否已过期
  5. 继续请求的操作......

我对加密一无所知,所以我有一些问题:

  1. 这是足够的还是过度杀伤?
  2. 我读到这是为了检测篡改我应该包含带有令牌的HMAC.由于我使用私钥签名,我还需要HMAC吗?
  3. 我应该使用Rijndael而不是RSA吗?
  4. 如果Rijndael是首选,那么生成的IV是否需要解密?即我可以扔掉它还是我需要发送加密令牌?例如,加密令牌+ HMAC + IV +散列随机值.

由于所有通信都通过HTTPS进行,因此未加密的JSON包在到达客户端之前并不真正未加密.

此外,我可能希望稍后在PHP中重新实现该服务,所以这一切都需要在PHP中可行.

谢谢你的帮助

security authentication rest token

21
推荐指数
1
解决办法
2万
查看次数

在iPhone应用程序中使用REST API时的安全性

我知道以前曾以各种形式提出过这个问题.但是,我不是在寻找"使用https"的答案.我已经在使用HTTPS了,我并不担心有效载荷来回传输的敏感性.

但是,我正在处理的iPhone应用程序正在与我构建的REST API进行通信(我已经控制了应用程序和服务器 - 因此欢迎任何建议).

我使用OAuth2协议进行身份验证,这意味着我的"API密钥"是客户端ID和客户端密钥的组合,只需要传输即可获取access_token.之后,使用access_token包含请求主体的HMAC的头部(使用客户端秘密作为密钥)将所有请求发送到服务器.这种添加的唯一原因是有人无法使用JUST进行API请求access_token.

我正在谈论的API将在我发布应用程序时公开.所以我不一定担心别人能够对它进行API调用.

我关心的是:

  • 人们可以使用我的应用程序的客户端凭据进行API调用(这意味着我无法在服务器端检测到它不是来自我的应用程序)
  • 人们可以滥用我的客户ID允许他们拥有的其他范围,而传统的API用户也不会

我的猜测是,这个问题并没有真正的解决方案(除了使用UIWebView并制作一个美化的webapp),但我想我还是会在这里问一下.

如果应用程序需要使用客户端ID /客户端密码,您能想到保护客户端ID /客户端密钥的方法吗?

security iphone encryption

4
推荐指数
1
解决办法
3417
查看次数

标签 统计

security ×2

authentication ×1

encryption ×1

iphone ×1

rest ×1

token ×1