我正在使用C#实现REST Web服务,该服务将作为云服务托管在Azure上.由于它是REST服务,因此它是无状态的,因此没有cookie或会话状态.
只能通过HTTPS(StartSSL.com提供的证书)访问Web服务.
用户成功登录服务后,将获得安全令牌.此令牌将在将来的通信中提供身份验证.
令牌将包含客户端的时间戳,用户ID和IP地址.
所有通信都只通过HTTPS进行,因此我不担心在重放攻击中被拦截和使用的令牌; 无论如何,令牌将有一个到期日.
由于这是面向公众的服务,我担心有人可以注册服务,登录然后修改他们收到的令牌以访问其他用户的帐户.
我想知道如何最好地保护令牌的内容并验证它没有被篡改.
我计划执行以下操作来保护令牌:
客户端成功登录服务,服务执行:
当客户端调用服务时,它会将未加密的JSON包中的加密令牌和签名发送到服务.服务会
我对加密一无所知,所以我有一些问题:
由于所有通信都通过HTTPS进行,因此未加密的JSON包在到达客户端之前并不真正未加密.
此外,我可能希望稍后在PHP中重新实现该服务,所以这一切都需要在PHP中可行.
谢谢你的帮助
我知道以前曾以各种形式提出过这个问题.但是,我不是在寻找"使用https"的答案.我已经在使用HTTPS了,我并不担心有效载荷来回传输的敏感性.
但是,我正在处理的iPhone应用程序正在与我构建的REST API进行通信(我已经控制了应用程序和服务器 - 因此欢迎任何建议).
我使用OAuth2协议进行身份验证,这意味着我的"API密钥"是客户端ID和客户端密钥的组合,只需要传输即可获取access_token.之后,使用access_token包含请求主体的HMAC的头部(使用客户端秘密作为密钥)将所有请求发送到服务器.这种添加的唯一原因是有人无法使用JUST进行API请求access_token.
我正在谈论的API将在我发布应用程序时公开.所以我不一定担心别人能够对它进行API调用.
我关心的是:
我的猜测是,这个问题并没有真正的解决方案(除了使用UIWebView并制作一个美化的webapp),但我想我还是会在这里问一下.
如果应用程序需要使用客户端ID /客户端密码,您能想到保护客户端ID /客户端密钥的方法吗?