WCF中基于令牌的身份验证

时间:2009-12-07 18:15:31

标签: flash wcf authentication token system.security

我正在创建一个包含ASP.NET页面和Flash小程序的网站。我希望将我的业务逻辑封装在WCF服务中,该服务将通过两个端点公开:一个可通过HTTP(S)访问Internet,供Flash客户端使用,另一个可在数据中心内访问,供应用程序服务器使用。如果这似乎不是一个好方法,那么请阻止我;否则,我会继续......

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

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

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

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

1 个答案:

答案 0 :(得分:2)

由于原来的问题似乎已得到回答,我将保持简短,但一种方法确实是在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

我想这可能仍然感觉像是“自己动手”的解决方案,但是当你遵循既定的模式时,它至少会令人放心。它确实具有通过服务方法对您的授权代码进行黑名单的优势。