ASP.NETAjaxを使用してASP.NETページからWCFを呼び出しています。フォーム認証を使用してWebサイトを保護しています。
本番サーバーにデプロイされるまで、開発を通じてすべてが期待どおりに機能していました。その後、サービスが見つからなかったため、JavaScriptエラーが発生し始めました。本番サーバーはSSLを使用しているため、web.configに以下を追加しました。
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport" />
</binding>
</webHttpBinding>
これにより、JavaScriptエラーの発生は停止しましたが、WCFサービスは以前のように動作しなくなりました。
セキュリティを設定してASP.NETからWCFサービスへの呼び出しを転送する前に、AjaxはApplication_AuthenticateRequest
Global.asaxでを実行します。IPrinciple
これにより、フォーム認証チケットにHttpContext.Current.User
基づいてカスタムが設定されます。WCFサービスセットのコンストラクター。これにより、サービスはの間にセットにThread.CurrentPrinciple = HttpContext.Current.User
アクセスできます。IPrinciple
Application_AuthenticateRequest
セキュリティをトランスポートに変更した後、私のカスタムではないApplication_AuthenticateRequest
ため、セキュリティが実行されていないように見えます。Thread.CurrentPrinciple
IPrinciple
トランスポートを使用する前と使用した後と同じ動作を得る方法を知っている人はいますか?
私のWebページは、WCFサービスを参照するために以下を使用しています。
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="
<Services>
<asp:ServiceReference Path="~/Services/MyService.svc" />
</Services>
</asp:ScriptManagerProxy>
私ので使用されているコードApplication_AuthenticateRequest
:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
String cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if (authCookie == null)
{
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch
{
return;
}
if (authTicket == null)
{
return;
}
HttpContext.Current.User = new CustomPrinciple(authTicket.Name);
}