0

これに対する答えを求めて 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 は認証されません。

したがって、私には次のように思われます。

  1. フォーム認証は、サービス内で機能することを望んでいたとおりに機能しています。リクエストが認証されたことを検出でき、その情報に移動します。
  2. フォーム認証が機能した、サービス メソッドが呼び出されるに、ASP.NET パイプラインのどこかでクラッシュして焼き付きます。

私はそこに同様の問題への言及を見つけることができなかったので、非常にばかげた明白な答えであることを願っていることを指摘するために、別の目 (または数千の目) をいただければ幸いです。

(誰かが見たい特定のコード領域がある場合は、要求に応じて追加できます。大量のランダムなコード サンプルで、すでに過剰に表現された投稿にさらに負担をかけたくありませんでした)

4

1 に答える 1

1

回避策としての質問への回答ではありません。ただし、根本的な目標へのより適切なアプローチだと思います。

この機能をServiceStackベースのソリューションに移植しました。私の推測では、私が使用していた WCF REST スターター キット コード内のどこかで競合が発生していたのですが、徹底的な分析は行っていません。

いずれにせよ、MVC サイトと私のサービスの間でフォーム認証を活用するという基本的な目標は、この新しいモデルで達成されました。

于 2012-08-26T19:28:59.287 に答える