6

認証 Cookie タイムアウトをリセットしない認証済み Web API 要求を実行しようとしています。MVC の世界では、応答から FormsAuthenication Cookie を削除することでこれを実現します。

 Response.Cookies.Remove(System.Web.Security.FormsAuthentication.FormsCookieName);

Web API 2 では、カスタム IHttpActionResult を作成し、応答から Set-Cookie ヘッダーを削除しています。ただし、このアクション結果を使用するリクエストの認証 Cookie が更新されているときに Set-Cookie ヘッダーがまだ表示されるため、これはヘッダーを削除するものではありません。

カスタム IHttpActionResult は次のとおりです。

public class NonAuthResetResult<T> : IHttpActionResult where T: class
{
    private HttpRequestMessage _request;
    private T _body;

    public NonAuthResetResult(HttpRequestMessage request, T body)
    {
        _request = request;
        _body = body;
    }

    public string Message { get; private set; }

    public HttpRequestMessage Request { get; private set; }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        var msg = _request.CreateResponse(_body);
        msg.Headers.Remove("Set-Cookie");
        return Task.FromResult(msg);
    }
}

これが機能しないため、Web API 2 で応答ヘッダーを編集するにはどうすればよいですか。

4

2 に答える 2

1

Web API 2 を使用している場合は、おそらく OWIN Cookie ミドルウェアを使用しています。あなたが説明していることは、認証クッキーのスライディング有効期限ウィンドウを無効にしたいようです。

標準の Web API テンプレートには、App_Start/Startup.Auth.cs が必要です。その中に次の行があります...

app.UseCookieAuthentication(new CookieAuthenticationOptions());

これにより、Cookie ミドルウェアが有効になり、構成されます。いくつかのオプションを渡して、タイムアウト ウィンドウを変更し、スライド有効期限を無効にすることができます...

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    SlidingExpiration = false,
    ExpireTimeSpan = new TimeSpan(1, 0, 0) // 1 hour
});
于 2014-02-07T17:17:12.977 に答える