6

フォーム認証を使用してユーザーを認証する wcf webhttp サービスがあります。チケットが Cookie コレクションまたは URL に含まれている場合、これは正常に機能します。

しかし、フォーム認証チケットの文字列をカスタム http ヘッダーで送信し、フォーム認証モジュールを変更して、Cookie の代わりにそのヘッダーをチェックしたいと考えています。

これを実現するためにフォーム認証を拡張するのは簡単だと思いますが、その方法に関するリソースが見つかりませんでした。正しい方向に私を向けることができますか?

これが私の認証フローの仕組みです。

  1. クライアントは、ユーザー名とパスワードを使用して認証メソッドを呼び出します
  2. サービスは暗号化されたチケット文字列を返します
  3. クライアントは、後続のすべてのリクエストで、受信したチケット文字列を http ヘッダーで送信します
  4. サービスは認証ヘッダーをチェックし、認証チケットを検証します
4

2 に答える 2

3

FormAuthentication モジュールは拡張できませんが、独自の認証を作成できます。それは非常に簡単です:

認証 (2):


var formsTicket = new FormsAuthenticationTicket(
    1, login, DateTime.Now, DateTime.Now.AddYears(1), persistent, String.Empty);
var encryptedFormsTicket = FormsAuthentication.Encrypt(formsTicket);
//return encryptedFormsTicket string to client

チケットが添付されたサービス コール(4):


var ticket = FormsAuthentication.Decrypt(encryptedFormsTicket)
//extract authentication info from ticket: ticket.Name
于 2012-05-10T03:57:48.493 に答える
2

これが(エレガンスに関して)進むべき道かどうかはわかりませんが、アプリケーションBeginRequestのglobal.asax.csにイベントを追加し、ヘッダーから文字列を取得して、自分でリクエストにCookieを挿入するのはどうでしょうか(フォーム認証は次にそれを拾います)。

何かのようなもの:


protected void Application_BeginRequest()
{
    // Your code here to read request header into cookieText variable
    string cookieText = ReadCookieFromHeader();

    var cookieData = FormsAuthentication.Decrypt(cookieText);

    if (!cookieData.Expired)
    {
        HttpContext.Current.Request.Cookies.Add(new HttpCookie(cookieData.Name, cookieText));
    }
}

免責事項:私はこれをテストしなかったことに注意してください、あなたの方法で可能なアプローチを投げるだけです!

于 2012-05-07T14:31:33.570 に答える