Я пытаюсь реализовать собственную схему аутентификации в моей службе WCF OData, где клиент отправляет свои учетные данные для входа на сервер и получает токен сеанса, если они аутентифицированы.Отправка учетных данных входа от клиента в службу OData
В службе OData, у меня есть метод Логин:
[WebInvoke]
public void Login()
{
HttpRequest request = HttpContext.Current.Request;
string user, password;
user = request.Form["User"];
password = request.Form["Password"];
//...
}
, который я называю от клиента с помощью JQuery:
$.ajax({
url: loginUrl,
type: 'POST',
data: JSON.stringify({ User: loginID(), Password: loginPassword() }),
dataType: 'json',
contentType: 'application/json; charset=utf-8'
});
В браузере, я вижу, что User
и Password
присутствуют в корпусе POST.
шагая через службу OData, метод Login()
идет удар, но User
и Password
не там - request.Form
совершенно пуст.
Сначала поиск найден this question, заявив, что тип содержимого POST должен быть установлен в application/json
вместо application/x-www-form-urlencoded
. Однако это изменение не решило проблему.
Searching нашел много SO вопросы о OData или WCF POST запросов порожняком, но я в конце концов нашел the MSDN page on WCF service operations, в котором говорится:
Способ управления может принимать только входные параметры. Данные, отправленные в теле сообщения, не могут быть доступны службой данных.
Соответственно, запрос POST не будет работать ни на что. Это означает, что мне придется использовать запрос GET. Однако отправка пароля по запросу GET isabadidea.
Нужно ли использовать базовую аутентификацию HTTP «faux», в которой я передаю учетные данные в заголовке, но только для входа в систему, а не с каждым запросом?
В противном случае, как правильно получить учетные данные для входа в систему от клиента к службе OData?