これに対する答えを求めて Web を精査しましたが、このような同様の問題を見つけましたが、まだ特定の答えを見つけていません。
フォーム認証を使用してログイン サポートを提供する MVC Web サイトを持っています (これは基本的に、MVC ですぐに使用できるログイン サポートです)。
同じドメイン内に、単一のメソッドを持つ WCF REST サービスがあります。
私がやろうとしているのは、サービス内からフォーム認証を利用して、リクエスターが MVC アプリケーションを介して既に「サインイン」しているかどうかを確認できるかどうかを確認することです。私が見つけたいくつかの他の投稿に続いて、web.configファイル(フォーム認証に関して)が同じであることを確認しました(同じマシンキーなど)。
ここに問題があります。MVC サイト経由でサインインできます (したがって、Cookie 経由で認証チケットを取得できます)。サービスに GET リクエストを送信すると (MVC と同じドメインで)、".ASPXAUTH" Cookie がリクエストと共に送信されていることがわかります。
しかし、毎回「400 Bad Request」という応答が返ってきます。さらに、応答の本文には、
「サーバーで要求の処理中にエラーが発生しました...」が示されています。
追加の観察:
- リクエストから .ASPXAUTH Cookie を削除すると (たとえば、Fiddler または curl を使用して)、リクエストは問題なく通過します。
- Fiddler または curl を使用して、MVC アプリの保護されたページに要求を送信し、同じ .ASPXAUTH Cookie を含めることができます。これは期待どおりに機能します (応答本文に期待されるコンテンツを含む 200 応答)。
- (奇妙なもの) global.asax.cs のApplication_AcquireRequestStateメソッド内でサービス アプリケーションにブレーク ポイントを設定し、要求を送信するときにヒットすることができます。
- 次に、HttpContext.Current.User.Identityを調べて、IsAuthenticatedが true であり、Nameが予想されるユーザー名を示していることを確認できます (MVC アプリを介した最初のログインから)。
- サービス メソッド内の実行可能なコードの最初の行のブレーク ポイントに到達することはありません。
もちろん、.ASPXAUTH Cookie を削除すると、サービスの両方のブレーク ポイントにヒットします (当然、この場合、ID は認証されません。
したがって、私には次のように思われます。
- フォーム認証は、サービス内で機能することを望んでいたとおりに機能しています。リクエストが認証されたことを検出でき、その情報に移動します。
- フォーム認証が機能した後、サービス メソッドが呼び出される前に、ASP.NET パイプラインのどこかでクラッシュして焼き付きます。
私はそこに同様の問題への言及を見つけることができなかったので、非常にばかげた明白な答えであることを願っていることを指摘するために、別の目 (または数千の目) をいただければ幸いです。
(誰かが見たい特定のコード領域がある場合は、要求に応じて追加できます。大量のランダムなコード サンプルで、すでに過剰に表現された投稿にさらに負担をかけたくありませんでした)