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
よろしくお願いします、