2012-04-05 7 views
6

フォーム認証を使用してユーザーを認証するwcf webhttpサービスがあります。チケットがクッキーコレクションまたはURLに入っていれば、これはうまく動作します。チケットのカスタムhttpヘッダーを使用するようにフォーム認証を拡張する

今はフォームの認証チケットの文字列をカスタムHTTPヘッダーに送信し、フォームの認証モジュールを変更して、そのヘッダーがCookieではなくチェックするようにしたいとします。

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

がここ

  1. 、私の認証フローがどのように働くかのクライアントは、クライアントがHTTPで受け取ったチケットの文字列を送信するサービスが暗号化されたチケット列
  2. を返し
  3. ユーザ名とauthenticateメソッドを呼び出し、PWD
  4. ヘッダはすべての後続のリクエストとともに返される
  5. authヘッダのサービスチェックで、正当なチケットの検証が行われます。
+0

はあなたが逆コンパイルフォーム認証モジュールを試してみました:付チケット(4)と

 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 

サービスコール?それをサブクラス化し、そのメソッドのいくつかをオーバーライドすることができるはずです。または、あなた自身で完全に自分宛てに書いてください – cecilphillip

+0

なぜ標準のCookieヘッダーの代わりにカスタムヘッダーでチケットを送信したいですか? –

+0

APIシナリオで見た目が良くなっていますクッキーを送信してもAPIには当てはまりません – Amila

答えて

3

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

認証(2):


var ticket = FormsAuthentication.Decrypt(encryptedFormsTicket) 
//extract authentication info from ticket: ticket.Name 
+0

実際にこの方法を実行して正常に動作します... – Amila

1

これは(優雅な)方法ではありませんが、アプリケーション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)); 
    } 
} 

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

関連する問題