我有一个需要防止未经授权的用户访问的 Web 服务。我需要根据用户名和密码公开一个 Web 服务操作来授权用户。对用户验证请求的响应应包含安全令牌。该安全令牌包含客户端应用程序可以使用的一些嵌入式用户属性,但在加密时,也将用于验证后续 Web 服务操作。未加密的令牌看起来像这样:
UID=444; DTE=2012-06-01T14:01:54.9571247Z; GID=1; WID=00:1C:B3:04:85:11; SID=lit3py55t21z5v55vlm25s55;
我可以使用对称密钥算法,因为密钥可以是客户端和服务器之间的共享密钥(我控制两者)。我使用 SHA1 和 256 的密钥大小实现了以下Rijndael 示例。
这段代码经常在互联网上被引用,但微软自己声明与 Rijndael 相关:
Rijndael类是Aes算法的前身。您应该使用Aes算法而不是Rijndael。有关详细信息,请参阅.NET 安全博客中的Rijndael 和 AES 之间的差异条目。
我应该有任何安全问题吗?如果是这样,您将如何更改示例代码,或者任何人都可以提供更好、更安全的示例?
最后,作为替代方案,我正在考虑使用Windows Azure 访问控制服务针对我自己的身份提供者颁发安全令牌,并使用该令牌作为单独的调用来获取用户帐户数据。由于应用程序在 Azure 中运行,这会是更好的实现方式吗?有人愿意分享他们在这样的架构中使用 ACS 的经验吗?
顺便说一句:客户端应用程序是 iOS 5。