WCF中基于令牌的身份验证

WCF中基于令牌的身份验证

问题描述:

我正在创建一个包含ASP.NET页面和Flash小程序的网站。我想将业务逻辑封装在一个WCF服务中,该服务将通过两个端点公开:一个通过HTTP(S)访问,供Flash客户端使用,另一个访问数据中心以供应用程序服务器使用。如果这看起来不是一个好方法,那么请阻止我在这里;否则,我将继续...WCF中基于令牌的身份验证

问题是如何验证来自Flash客户端的请求。由于我不想将用户的密码存储在浏览器cookie中,因此不希望在每次请求时都发送密码,也不希望在初始登录后使用HTTPS,我打算使用令牌 - 基于认证系统。我也不希望用户在登录到网站后不得不登录Flash客户端,因此我打算在使用Javascript将启动时的令牌传递给Flash客户端。

我知道WCF支持使用.NET Framework的内置安全框架(System.Security)来实施访问控制,我想利用这一点。

那么问题是:如何在通过Flash调用令牌到WCF服务时如何传递令牌,以及如何在服务器上处理令牌?

  • WCF有一个“颁发的令牌”身份验证模式,但现在看来这是为了在一个完全成熟的联合方案中要使用带有安全令牌服务和SAML令牌 - 多一点复杂,我真的想。我可以用我自己的“简单的随机串”标记来使用这种模式吗?如果是这样,怎么样?请记住,这需要与Flash兼容。
  • 我可能会传递标头中的标记(SOAP标头或HTTP标头)。在这种情况下,一旦我确定了哪个用户正在提出请求,我如何通知框架以便System.Security检查能够工作?
  • 我应该考虑完全不同的方法吗?任何避免在每个请求中发送密码的东西都可以让我使用System.Security,并且可以使用Flash。
+0

亚伦,你有没有想过一个简单的方法来做到这一点?我正在尝试在WCF中执行一些简单的基于令牌的身份验证,并且它看起来比它应该更困难。 – technophile 2010-02-11 21:56:55

+0

我结束了基本上我自己。我有一个发出令牌的WCF端点 - 它需要一个用户名和密码,验证它们,并用令牌响应,在我的情况下,令牌只是一个随机字符串。实际的业务逻辑方法位于不同的端点上,该端点具有自定义消息检查器,用于读取包含令牌的自定义头。在客户端上,另一个消息检查器将头添加到传出消息。这比我希望做的更多的工作,但它似乎运作良好。 – Aaron 2010-02-16 22:54:15

,因为它似乎原来的问题已经回答了我会记住这简短,但一个方法确实是通过HTTP标头中的身份验证令牌,并覆盖CheckAccess(OperationContext operationContext, ref Message message)在自定义ServiceAuthorizationManager

您以前将配置该服务以使用实施IAuthorizationPolicy的自定义策略。

剩下的就是实现简单的IIdentityIPrincipal类来存储您的授权状态。

关于这个问题存在许多好文章:

http://msdn.microsoft.com/en-us/library/system.identitymodel.policy.iauthorizationpolicy.aspx

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

我想这可能仍然觉得自己像一个“滚你自己”的解决方案,但它至少让人放心当你按照既定的模式。它的优点是通过服务方法对授权代码进行黑框。