FormsAuthentication ASPXAUTH Cookie WCF и JSON

У меня есть веб-служба WCF, которая предоставляет функции для получения информации X. Служба возвращает информацию в формате JSON. Что мне нужно сделать, если я хочу защитить этот веб-сервис? Не используя стандартную защиту IIS, я хочу использовать пользовательский логин (с проверкой базы данных).

Клиентское приложение, откуда я хочу показать информацию X, вызывает вызовы JQUERY и AJAX. Во-первых, у меня есть страница входа, где я могу ввести имя пользователя и пароль (зашифрованные в MD5). Клиент вызывает службу с этими данными, а служба возвращает ДА, если пользователь действителен (простой выбор в базе данных postgresql) или false. На данный момент я инициирую объект 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

Во-вторых, я вижу, что когда я делаю вызовы из кода клиента, cookie.ASPXAUTH передается для каждого вызова. Но что мне нужно делать на стороне сервера, чтобы проверить, что это хороший пользователь, а не "украденный" код 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

С наилучшими пожеланиями,

+1
источник поделиться
1 ответ

Из того, что вы описали, я предполагаю, что вы используете свою службу WCF, используя привязку http в IIS.

Если вы включите аутентификацию форм в web.config, механизм ASP.NET позаботится о чтении файла cookie auth и установит личность потока, обрабатывающего запрос. Вам не нужно иметь дело с файлом cookie напрямую. Чтобы проверить подлинность пользователя, проверьте свойство HttpContext.Current.User.Identity.IsAuthenticated.

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос