WindowsCommunicationFoundation認証サービスを探しているようです。
編集:
質問をもっと注意深く読み直した後(そしてアリエルのコメントの後)、私は上記の提案を撤回したいと思います。WCF認証サービスは、このシナリオに多くを追加しません。
WCFとASP.NETの間でこれを行ったことはありませんが、フォーム認証されたユーザーを共有するようにASP.NETアプリケーションを構成しました。おそらく、何らかの方法で支援できます。
両方のアプリケーションが同じ方法でフォーム認証Cookieを暗号化/復号化できるようにするには、両方のアプリケーションの要素を構成する<machineKey>必要があります(これをマシンレベルまたはアプリケーションレベルで行うかどうかに応じて、web.configまたはmachine.configで)。validation、、、および属性を確認する必要がvalidationKeyあります。decryptiondecryptionKey
<forms>両方のweb.configファイルの要素が同じように構成されていることを確認してください。具体的には、、nameおよびpath属性domain。
これは、Webブラウザとの間でやり取りされるCookieにのみ適用される可能性があります(ただし、この場合は便利です)。Webサイトwww.foo.comとbar.foo.comformsの間でCookieを渡すことができるようにするには、要素を構成します。次のようにして、Cookieを一方のサイトに設定し、もう一方のサイトに正常に渡すことができます。
<forms ... domain=".foo.com" ... />
CookieをWCFサービスに渡すのは、難しい作業になる可能性があります。私はWCFの経験があまりないので、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)ます。
これがうまくいくかどうかはわかりませんが、うまくいくかどうか聞いてみたいです!