Чтение имени пользователя и пароля, отправленных из приложения Android, в мою службу WCF REST? - PullRequest
1 голос
/ 01 октября 2010

Мой текущий метод WCF REST определен как:

[OperationContract]
[WebGet(UriTemplate = "{username}/{password}", ResponseFormat =                   
                                                        WebMessageFormat.Json)]
string Login(string username, string password);

Клиентское приложение для Android будет подключаться к сервису, скажем, оно http://service.com/login.svc/login...

Но я неЯ не хочу, чтобы имя пользователя и пароль передавались в URL, как я указал в UriTemplate.Как я могу получить имя пользователя и пароль из приложения Android в свой сервис, или еще лучше, как я могу изменить свой метод входа в систему, чтобы получить имя пользователя и пароль в некоторых параметрах POST, которые я могу обработать в своей функции входа в систему и проверить пользователя на соответствиебаза данных членства sql.

1 Ответ

1 голос
/ 01 октября 2010

Мы сделали это с помощью заголовка «Авторизация».Клиенты передают зашифрованный набор учетных данных, и мы создаем для них токен на нашей стороне.Вот пример метода BeginRequest модуля HttpModule, который обрабатывает аутентификацию.Мы используем пользовательский принципал для обработки токена:

 private void BeginRequest(Object source, EventArgs e)
    {
        if (null == HttpContext.Current || String.IsNullOrEmpty(HttpContext.Current.Request.Headers["Authorization"]))
        {
            HttpContext.Current.Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
            HttpContext.Current.Response.End();
        }

        HttpContext context = HttpContext.Current;
        Regex matcher = new Regex(WfmConfigurationManager.GetAppSetting("AuthenticationPath"));

        if (!matcher.IsMatch(context.Request.Url.ToString(),0))
        {
            String authHeader = context.Request.Headers["Authorization"];
            IIdentity tokenIdentity = new TokenIdentity(authHeader);

            if (!tokenIdentity.IsAuthenticated)
            {
                HttpContext.Current.Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
                HttpContext.Current.Response.End();
            }

            IPrincipal tokenPrincipal = new TokenPrincipal(tokenIdentity, TokenAuthentication.GetRolesForUser(tokenIdentity));
            HttpContext.Current.User = tokenPrincipal;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...