【问题标题】:Sending licensekey from client to server via WCF in header通过标头中的 WCF 将许可证密钥从客户端发送到服务器
【发布时间】:2011-08-19 16:30:17
【问题描述】:

我想使用许可证密钥针对我的中心对应用服务器进行身份验证,并且我不想将其作为参数包含在我的调用中。

我已经实现了自定义 ServiceAuthorizationManager,但我不确定在客户端设置此 licenseKey 的最佳方式和位置是什么。

我在下面尝试过(我的方法可能完全错误)

<endpoint address="http://127.0.0.1:8000/ApiDataService"  binding="wsHttpBinding"
    contract="MyInterfaces.IApiDataService">
        <headers>
            <LicenseKey>MyLicenseKey</LicenseKey>
        </headers>
</endpoint>

然后在ServiceAuthorizationManager.CheckAccessCore(OperationContext operationContext)中

我已设法通过以下方式找到标题的索引:

operationContext.RequestContext.RequestMessage.Headers.FindHeader("LicenseKey", "")

但检索到的 HeaderInfo 不再包含我的内容。 我确定它在 operationContext.RequestContext 中,所以我应该能够以某种方式捕获它。

  1. 知道怎么做吗?
  2. 有没有更好/标准的方法来做到这一点?
  3. 我应该使用 元素吗?

我非常乐意使用 operationContext.ServiceSecurityContext,但我不知道如何在客户端设置它以及在哪里放置我的自定义许可证密钥。

我有多个端点,所以我希望有一个地方存放我的许可证密钥。从代码中设置会更好。

谢谢

【问题讨论】:

    标签: wcf security authentication endpoint


    【解决方案1】:

    您可能会对本文Globalization Patterns in WCF (WS-I18N implementation) 感兴趣,因为它演示了如何使用 WCF 带外机制来发送和接收自定义信息。这是关于全球化,当然不是许可,但问题似乎有点相似。

    【讨论】:

    • 谢谢。它通过实现 IDispatchMessageInspector 和 IClientMessageInspector 为我指明了正确的方向。我的解决方案有点不同。我还实现了 LicenseBehaviour: BehaviorExtensionElement, IEndpointBehavior, IServiceBehavior,因为它在这里:winterdom.com/2006/10/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多