如何使用 Microsoft JWT 令牌处理程序来保护基于 webHttpBinding 的 WCF 服务
Posted
技术标签:
【中文标题】如何使用 Microsoft JWT 令牌处理程序来保护基于 webHttpBinding 的 WCF 服务【英文标题】:How to use Microsoft JWT Token Handler to secure webHttpBinding based WCF service 【发布时间】:2014-08-12 15:11:18 【问题描述】:我需要保护使用带有令牌的 webHttpBinding 的 WCF 服务,但很难弄清楚如何做到这一点。据我了解,推荐的方法是使用 JWT 令牌?
我有一个 STS (IdentityServer),它通过 OAuth 2.0 向我的移动客户端(Sencha Touch 应用程序)发出 JWT 令牌,并且此应用程序需要调用基于 webHttpBinding 的 WCF 服务。
现在我想使用令牌来保护它,我知道微软已经发布了一个 JWT 安全令牌处理程序 NuGet 包。
我已经在 web.config 中我的“identityConfiguration”标签下的“securityTokenHandlers”标签中添加了这个安全令牌处理程序,但我对如何实际使用令牌处理程序来验证令牌、提取声明感到有点迷茫并设置 IClaimsPrincipal 对象。
我找到的大多数示例都使用 WebAPI 并且用于 ASP.NET 应用程序,但就我而言,我只需要使用 webHttpBinding 来保护“普通”WCF 服务。
任何有关如何完成此操作的帮助,将不胜感激。
【问题讨论】:
【参考方案1】:您不会找到很多通过 SOAP 服务实现 OAuth 的示例。 OAuth 主要是为无法处理 SOAP 及其相关 WS-Security 复杂性的客户端创建的。
虽然不常见,但仍有可能,您只需实现自己的 WCF 管道挂钩 (IDispatchMessageInspector) 以从 HTTP 标头获取令牌,然后使用 JWT 类设置您的声明。
我没有使用过这个代码示例,但看起来它会做你想做的事。 http://blogs.msdn.com/b/pavelkhodak/archive/2013/07/26/enable-http-bearer-jwt-token-authentication-for-rest-service-using-webhttpbinding-in-wcf.aspx
【讨论】:
感谢您的回答。不过,我现在有点困惑。我在 WCF 中使用 webhttpbinding,据我了解,这是一种 REST 样式的绑定,而不是基于 SOAP 的?那么使用 OAuth 来保护 REST 风格的服务是不是很罕见呢?如果是这样的话,我会很困惑,如果你能指出我如何使用令牌保护 webhttpbinding 的其他方向,我将不胜感激?谢谢你提供链接,我去看看:) 很抱歉给您带来了困惑。我的错误,webhttpbinding 是一个 REST 风格的服务。 WCF REST 框架的寿命很短,因为 WCF 的设计主要考虑了 SOAP。现在 .NET 中的所有 REST 服务都是使用 Web API 构建的,它具有不同的安全拦截点。不过,我提到的文章仍然有效。您需要将 IDispatchMessageInspector 组件实现为行为扩展,以挂钩到 WCF 管道并处理令牌。 如果您想更好地了解 WCF 管道和拦截点,请阅读这篇文章。 msdn.microsoft.com/en-us/magazine/cc163302.aspx以上是关于如何使用 Microsoft JWT 令牌处理程序来保护基于 webHttpBinding 的 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Microsoft 身份平台身份验证在 ASP.NET Core Web 应用程序中获取 JWT 令牌?
.NET JWT 令牌验证的命名空间:系统与 Microsoft