2017-01-26 2 views
0

Я пытаюсь реализовать собственную схему аутентификации в моей службе 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?

ответ

1

В противном случае, как правильно получить учетные данные для входа в систему от клиента к службе OData?

Правильный способ состоит в том, чтобы отделить аутентификацию от службы OData. В основном вам необходимо создать конечную точку для вашего сервиса, например./Лексема на основе OAuth, к которому вы передаете учетные данные пользователя в почтовом вызова с

grant_type=password&username=... &password=... 

, а затем получить маркер доступа, который вы впоследствии передать в заголовке вашего OData вызывает

Authorization: Bearer <access_token> 

Сам контроллер OData не обрабатывает создание аутентификации и токена.

Существует очень хорошая серия учебников от Taiseer Joudeh, которую я рекомендую читать: http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/

Смежные вопросы