我正在研究为现有的asp.net应用程序创建WCF REST服务,以供各种客户端使用,包括Windows Phone 7,Android,iPhone应用程序等。
创建一个简单的WCF REST服务并从上述平台中使用它并不是问题,而且效果非常好。我正在努力解决的问题是授权。
asp.net应用程序使用Membership提供程序来提供身份验证和授权,我很乐意使用REST服务中的API。
如何保护我的REST服务,以便第一次调用必须进行身份验证(传递用户名和密码)以及跟随调用知道谁“登录”。我猜测authenticate方法必须传回某种令牌,以便在后续的识别调用者的调用中使用。这是否足够安全,因为整个站点/服务都通过SSL?
欢迎任何建议。
答案 0 :(得分:4)
更安静的身份验证方案是使用HTTP身份验证,例如基本或摘要。由于您的服务是通过SSL,Basic应该足够了。每次请求都会发送身份验证令牌(登录/密码),因此服务可以是无状态的。我所知道的每个客户端库都可以处理基本身份验证。
答案 1 :(得分:2)
通常,令牌方法比在每个请求中发送用户名+密码(基本身份验证)更好。问题是要正确实现它:虽然基本身份验证非常容易实现,实际上它已经被大多数应用程序和Web服务器实现,但令牌是您需要自己实现的 - 它必须加密,因此客户赢了“理解它,所以你需要一些密钥管理,它也必须有一些到期日期,可能你会想要一些撤销功能。
此外,它将使客户的生活变得更加困难:客户端必须首先进入某个身份验证点,接收有效的服务器,然后在请求中使用令牌,而不是仅将基本身份验证标头附加到每个请求。如果令牌过期,客户端将需要再次转到身份验证点。
因此,如果您有时间和知识,并且您的客户很聪明,那么最好使用令牌方法。否则使用SSL,基本身份验证就足够了。
答案 2 :(得分:0)
我在WP7的最新Windows Azure工具包中看到了一个可能对您有所帮助的示例。它基本上使用成员资格提供程序,登录一个人(第一次安装应用程序的人),然后生成故障单。然后加密此票证并将其作为TOKEN发回,然后将其存储在隔离存储中的电话上。票证的到期时间设置为int.MaxValue,以便令牌在很长一段时间内保持良好状态。
现在,此令牌将传递到授权标头中的Web服务,在此处对其进行解密,验证用户的身份,然后进行Web服务调用。
希望这会有所帮助。我试图解决类似的情况并相信我,没有太多指出我们正确的方向......如果你问我,这是一个非常悲伤的事情。