5

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

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

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

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

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

1 回答 1

2

似乎最初的问题已经得到回答,我将保持简短,但一种方法确实是在 http 标头中传递身份验证令牌并CheckAccess(OperationContext operationContext, ref Message message)在 custom 中覆盖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

我想这可能仍然感觉像是一个“自己动手”的解决方案,但是当您遵循既定模式时,它至少可以让人放心。它确实具有将您的授权代码从您的服务方法中黑盒化的优势。

于 2011-03-31T17:42:48.750 回答