0

httpファサードにajax/json呼び出しを行い、wcfサービスレイヤーに呼び出しを渡すasp.net 4.0アプリケーション(クライアント)があります。

ユーザーは、フォーム認証を使用してクライアントで認証する必要があります。その場合、認証Cookieがhttpファサードに渡され、httpファサードでアクセスできるようになるという考えです。[DinoEspositoの本に基づく設計-MicrosoftASP.NETおよびAJAX:Webアプリケーションの設計]

問題は、ファサードでHttpContext.Current.User.Identity.Nameが空の文字列であり、IsAuthenticatedがfalseであるということです。

web.config(httpファサードレベル)のsystem.ServiceModelセクションに以下を追加して、互換性を有効にしました。

<system.serviceModel>   
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />  
</system.serviceModel> 

私は自分のサービスを次のように飾りました:

    [AspNetCompatibilityRequirements(RequirementsMode =
 AspNetCompatibilityRequirementsMode.Required)] 

ajax / facadeアプリでデバッグしていると、HttpContext.Current.Request.CookiesにCookieが存在することがわかります。認証されたユーザーではなく、匿名が使用されているようです。

両方のアプリケーションが同じIISサーバーで実行されています。

AJAX対応のwcfサービスへの呼び出しは、serviceProxy.jsを介して行われます。おそらく、このメソッドは必要なCookieを渡していないのでしょうか。

WCFトレースは現在'..ASPXANONYMOUS=.....;を表示しています。ASP.NET_SessionId = ....; メッセージログの.ASPXAUTH=.....'。

単純なものが欠けているような気がしますが、問題に近すぎます。

どんな提案も歓迎します。

4

1 に答える 1

1

あなたが達成しようとしていることの文脈を完全に理解しているかどうかはわかりませんが、これらが2つの別々のアプリケーションである場合、両方の認証Cookieを復号化/暗号化するためにマシンキーを共有する必要があります。

web.configで、次のセットがあることを確認してください。

<machineKey
  validationKey="[generated key]"
  validation="HMACSHA512"
  decryptionKey="[generated key]"
  decryption="AES"
  />

このcodeprojectの記事で、これらのキーを生成する方法(およびそれらに関する詳細情報)を参照してください。

ASP.NetmachineKeyジェネレーター-CodeProject

これが役立つかどうか教えてください...

于 2012-07-27T03:45:36.510 に答える