听起来您正在寻找Windows Communication Foundation Authentication Service。
编辑:
在更仔细地重新阅读了这个问题之后(以及在 Ariel 的评论之后),我想撤回上述建议。 WCF 身份验证服务不会为这种情况添加太多内容。
我还没有在 WCF 和 ASP.NET 之间这样做,但是我已经配置 ASP.NET 应用程序来共享经过身份验证的用户的表单,也许我可以提供一些帮助。
为确保两个应用程序可以以相同的方式加密/解密表单身份验证 cookie,您应该为两个应用程序 configure the <machineKey> element(在 web.config 或 machine.config 中,具体取决于您是要在机器上还是应用程序上执行此操作)等级)。您应该查看validation、validationKey、decryption 和decryptionKey 属性。
确保两个 web.config 文件中的 <forms> 元素配置相似。特别是name、path 和domain 属性。
这可能仅适用于传入/传出网络浏览器的 cookie(但在这种情况下可能有用):允许 cookie 在网站 www.foo.com 和bar.foo.com 您可以按如下方式配置 forms 元素,以允许在一个站点上设置 cookie 并成功传递给另一个站点:
<forms ... domain=".foo.com" ... />
将 cookie 传递给 WCF 服务可能是一个棘手的问题。我对 WCF 不是很有经验,所以I've adapted code from kennyw.com:
HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers.Add(HttpRequestHeader.Cookie, "<Forms Authentication Cookie>");
using (OperationContextScope scope = new OperationContextScope(serviceClient.InnerChannel))
{
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
serviceClient.MethodName();
}
如果您在 IIS 中托管 WCF(而不是自托管),则可以通过设置
通过 ASP.NET 处理管道传递 WCF 请求
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" ... />
</system.serviceModel>
如果您是自托管的,您可以使用 OperationContext.Current.IncomingMessageProperties 中的传入消息属性检查请求标头,并获取表单身份验证 cookie 值并使用 FormsAuthentication.Decrypt(string) 对其进行解密。
我不知道这是否可行,但很想听听是否可行!