2

IIS でホストされている WebAPI サービスに基本的な HTTP 認証を実装しようとしています。サーバーとクライアントの間でユーザー関連のデータを送信するために Cookie を使用しようとしています。このコードは、クライアントが Firefox の場合に機能するように見えますが、IE または Chrome を使用している場合、Cookie はサーバーに送り返されません。

私は次のものを持っています。

このような応答メッセージにCookieを追加しています... HttpModule.AuthenticateRequest-eventハンドラーで...

HttpApplication app = sender as HttpApplication;

HttpResponse response = app.Context.Response;
HttpRequest request = app.Context.Request;

HttpCookie c = new HttpCookie("MyCookie", "Hellou!");
c.Expires = DateTime.Now.AddDays(1);
c.Domain = request.Url.Host;
c.Path = "/";

response.Cookies.Add(c);

...またはコントローラの POST アクションで:

CookieHeaderValue chv = new CookieHeaderValue("MyCookie", "Hellou");
chv.Expires = DateTime.Now.AddDays(1);
chv.Domain = Request.RequestUri.Host;
chv.Path = "/";

rmsg.Headers.AddCookies(new CookieHeaderValue[] { chv });

HttpModule.AuthenticateRequest-event ハンドラで、このように Cookie を読んでいます

HttpApplication app = sender as HttpApplication;
HttpRequest request = app.Context.Request;

if (request.Cookies.Count > 0)
{
    HttpCookie c = request.Cookies.Get("MyCookie");
    if (c != null)
    {
        // ...
    }
}

クッキーコードは正しいですか?Cookie がすべてのクライアントで確実に機能するようにする方法はありますか?

4

1 に答える 1

3

基本認証の全体的な考え方は、ユーザーのユーザー名とパスワードが Authorization ヘッダーの各要求でクライアントによって送信されるということです。API を設計する場合、Cookie は必要ありません。

基本認証を使用したくない場合 (リクエストごとにユーザー名とパスワードを送信する必要があるため)、API をトークンで保護できます。following articleを例に見てみましょう。

于 2013-02-28T10:22:13.943 に答える