Azure で mvc 4 Web API プロジェクトを構築しています。この API へのリクエストは、次のルートを通過します。
routes.MapHttpRoute(
name: "DefaultApi", // Route name
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
同じドメインと別のルートで、mvc Web サイトをセットアップしました。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
mvc Web サイトは、Access Control Services とやり取りしてトークンを取得する HTML と Javascript のページにすぎません。トークンをサービスに渡して、jQuery ajax 経由でデータを取得します。
サービスのセキュリティを実装する (API に送信されたトークンを検証する) ために、この記事で説明されているように SWTModule クラスと TokenValidator クラスを使用し、MVC 4 Web アプリケーション プロジェクトの Web.Config system.webserver 属性を呼び出します。
<modules runAllManagedModulesForAllRequests="true">
<add name="SWTModule" type="SecurityModule.SWTModule, SecurityModule" />
</modules>
[Authorize] で MVC コントローラー メソッドをマークしていませんが、既定の Web ページを読み込むと、次のエラーが発生します。
「/」アプリケーションでサーバー エラーが発生しました。
無許可
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.ApplicationException: 無許可
ソース エラー:
43 行目: 44 行目: // 'WRAP' で始まることを確認します 45 行目: if (!headerValue.StartsWith("WRAP ")) 46 行目:
{ 47 行目: new ApplicationException("unauthorized") をスローします。ソース ファイル: D:\Dev\VisualStudio2010\Projects\myServices\Azure\myDataInterfaces\SecurityModule\SWTModule.cs 行: 45
スタックトレース:
[ApplicationException: 無許可]
D:\Dev\VisualStudio2010\Projects\myServices\Azure\myDataInterfaces\SecurityModule\SWTModule.cs:45 System.Web.SyncEventExecutionStep.System.Web の SecurityModule.SWTModule.context_BeginRequest(オブジェクト送信者、EventArgs e)。 HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270
コントローラー メソッドに [Authorize] を付けていなくても、SWT トークンの検証がすべての応答に対して実行されているため、おそらく Web スタックで以前に呼び出されたため、それらが拒否されているように思えます。 Web.Config 属性?
誰かがこれを機能させる方法について正しい方向に向けることができますか? デフォルトの Web ページ (Home controller Index メソッド) にログイン画面が表示され、メイン ページにリダイレクトされるようにしたいと考えています。ユーザーが使用可能な ACS ID プロバイダーのいずれかを使用してログインしていない場合、そのメイン ページは無許可で返されます。同様に、Web API の ApiController メソッドの一部を公開したままにし、他のメソッドには承認を要求したいと考えています。
現在、MVC アプリと Web API サービスの両方を、Visual Studio の単一の Web ロール ソリューション内の単一の Web アプリケーション プロジェクト内の単一の Global.asax ファイルを介してルーティングしています。これを修正する方法は、HTML MVC サイトと Web API を、同じ Web ロール ソリューションの下で別の Web アプリケーション プロジェクトに分離することでしょうか? それでも、一部のコントローラー メソッドに承認要件を割り当てる手段は得られません。コントローラーと ApiController をルーティングするための別の場所が得られるだけです。
近くにいるような気がしますが、何か大きなものを見落としているかもしれませんが、オンラインで見つけられないようです. 誰かが私をまっすぐにしてくれますか?
ありがとう、アレックス