1

X 情報を取得する関数を公開する WCF Web サービスがあります。サービスは JSON 形式で情報を返します。この Web サービスを保護するにはどうすればよいですか? デフォルトの IIS セキュリティを使用せず、カスタム ログインを使用したい (データベース検証あり)。

X 情報を表示したいクライアント アプリケーションは、JQUERY および AJAX 呼び出しを行います。まず、ユーザー名とパスワード (MD5 で暗号化) を入​​力できるログイン ページがあります。クライアントはこれらの情報を使用してサービスを呼び出し、ユーザーが有効 (postgresql データベースでの単純な選択) または false の場合、サービスは YES を返します。ここでは、FormsAuthentication オブジェクトを開始し、それを Cookie に追加します。

Private Function SetAuthCookie(name As String, rememberMe As Boolean, userData As String) As Integer

    ' In order to pickup the settings from config, we create a default cookie and use its values to create a new one.
    Dim cookie As HttpCookie = FormsAuthentication.GetAuthCookie(name, rememberMe)
    Dim ticket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(cookie.Value)

    Dim newTicket As New FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData, ticket.CookiePath)
    Dim encTicket As String = FormsAuthentication.Encrypt(newTicket)

    ' Use existing cookie. Could create new one but would have to copy settings over...
    cookie.Value = encTicket

    HttpContext.Current.Response.Cookies.Add(cookie)

    Return encTicket.Length
End Function

次に、クライアント コードから呼び出しを行うと、.ASPXAUTH Cookie が呼び出しごとに渡されることがわかります。しかし、これが善良なユーザーであり、「盗まれた」Cookie ASPXAUTHコードではないことを検証するには、サーバー側で何をする必要がありますか? この小さな isValidUser 関数では、呼び出しを有効にするのに十分ではないと思います。

Private Function isValidUser() As Boolean
    Dim cookie As HttpCookie = HttpContext.Current.Request.Cookies(FormsAuthentication.FormsCookieName)

    If cookie Is Nothing Then Return False

    Dim decrypted = FormsAuthentication.Decrypt(cookie.Value)

    If String.IsNullOrEmpty(decrypted.UserData) Then Return False

    Return True
End Function

よろしくお願いします、

4

1 に答える 1

1

あなたの説明から、IIS内でhttpバインディングを使用してWCFサービスを実行していると思います。

web.config でフォーム認証を有効にすると、ASP.NET エンジンが認証 Cookie を読み取り、要求を処理するスレッドの ID を設定します。Cookie を直接処理する必要はありません。ユーザーが認証されているかどうかを確認するには、HttpContext.Current.User.Identity.IsAuthenticatedプロパティを確認します。

于 2012-07-05T20:40:17.107 に答える