6

現在、ウィジェットを販売するMVCWebアプリケーションがあります。ユーザーはフォーム認証を使用してシステムにログインし、所属するグループに基づいてさまざまな機能を実行できます(つまり、注文、注文の表示、注文のキャンセルなど)。

私たちは、サードパーティがシステムで注文を作成および表示できるようにするApiを作成するという任務を負っています。各サードパーティには独自のユーザー名があり、所属するグループに基づいて特定のapiメソッドに制限されます。

APIを提供するメカニズムとしてWebApiを使用することを検討しています。また、MVCWebアプリケーションからこのAPIを使用できるようにしたいと考えています。残念ながら、WebApiの認証で問題が発生しています。DelegatingHandlerを使用して、WebApiにSSLを介した基本認証を実装しました。これは、サードパーティに最適です。ただし、MVCアプリケーションからApiを使用しようとすると、ユーザーがフォーム認証を使用してMVCアプリで認証されたため、401アクセス拒否エラーが発生しますが、これらの資格情報をWebApiに渡す方法はありません。FormsAuthクレデンシャルをMVCアプリからWebAPIアプリに渡す方法はありますか?

2つのWebアプリケーションを備えたWidgetStoreという名前のIISセットアップWebサイト

  • WidgetStore\UI-フォーム認証を使用
  • WidgetStore\Api-基本認証を使用します
4

1 に答える 1

9

FormsAuthクレデンシャルをMVCアプリからWebAPIアプリに渡す方法はありますか?

確かに、たとえば、WebAPIを呼び出す次のMVCコントローラーアクションを考えてみましょう。

[Authorize]
public ActionResult CallWebApi()
{
    var baseAddress = new Uri("https://example.com");
    var cookieContainer = new CookieContainer();
    using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
    using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
    {
        var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName].Value;
        cookieContainer.Add(baseAddress, new Cookie(FormsAuthentication.FormsCookieName, authCookie));
        var result = client.GetAsync("/api/values").Result;
        result.EnsureSuccessStatusCode();

        // now you can read the result.Content ...
    }
}

これは、Web APIプロジェクトのweb.configでもフォーム認証を有効にしており、Cookie名がMVCプロジェクトで使用されているものと同じであることを前提としています。

于 2012-09-21T06:22:31.327 に答える