Может ли локальное html5-приложение иметь сеанс asp.net?(локальное веб-приложение для iPhone) - PullRequest
5 голосов
/ 08 сентября 2010

Контекст:

Я на самом деле разрабатываю небольшое веб-приложение (C # / MVC2).Пользователи будут использовать свои iPhone (и, возможно, телефоны Android в будущем) для доступа к нему.

На данный момент это довольно просто (просто показывает некоторую информацию и отчеты из ERP нашего клиента), и я решил попробовать создать локальное веб-приложение, которое пользователи могли бы добавить в свои iPhone, чтобы они моглизначок для него и, самое главное, большинство файлов кэшируются локально, так что с помощью json с сервера получают только соответствующие данные.

Проблема:

Для аутентификации пользователей небольшая форма запрашивает имя пользователя и пароль и отправляет их на сервер через ajax, который, в свою очередь, проверяет пользователя и устанавливает authcookie.Если приложение выполняется в Safari, все работает нормально, но если оно выполняется локально (то есть в Mobile Safari непосредственно из значка), сервер правильно проверяет пользователя, но эта проверка теряется при следующем вызове ajax для восстановления данных.сделано.

Означает ли это, что файлы cookie сеанса не поддерживаются Mobile Safari в веб-приложениях?Я делаю это неправильно?

И самое главное: Каков наилучший способ аутентификации пользователей в локальном веб-приложении, которое имеет доступ к удаленным данным?

Ответы [ 4 ]

0 голосов
/ 10 февраля 2015

Ваша лучшая ставка: http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

Для доступа к защищенному ресурсу клиент включает токен доступа. в заголовке авторизации HTTP-запроса

Логин:

var loginData = {
    grant_type: 'password',
    username: ...,
    password: ...
};

$.ajax({
    type: 'POST',
    url: '/Token',
    data: loginData
}).done(function (data) {
    // Cache the access token in session storage.
    sessionStorage.setItem(tokenKey, data.access_token);
});

Второй запрос:

// If we already have a bearer token, set the Authorization header.
var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
    headers.Authorization = 'Bearer ' + token;
}

$.ajax({
type: 'GET',
url: 'api/values/1',
headers: headers
}).done(function (data) {});

Если вы не планируете использовать Web API, вы должны сгенерировать свой собственный токен и поместить его в данные каждого запроса

0 голосов
/ 16 июня 2011

(я понимаю, что очень опаздываю на этот вопрос, но в любом случае…)

Mobile Safari использует немного другой веб-движок, чем тот, который используется в «приложениях домашнего экрана» (т. е. веб-страницы, которые вы отмечаете как отдельные значки на главном экране iOS).

Возможно, проблема, с которой вы сталкиваетесь при использовании файлов cookie, связана не с Mobile Safari как таковым ?Я полагаю, это достаточно просто проверить: если все приложение работает нормально в Mobile Safari, а не с иконки на главном экране, есть ваш ответ.

В качестве альтернативы, а не полагаться на аутентификацию вЛинейная версия приложения, другой подход, который может работать для вас / вашей организации, заключается в использовании приложения в состоянии без проверки подлинности, но через VPN для мобильных работников?(Это все равно будет работать нормально как автономное веб-приложение).

0 голосов
/ 24 июня 2011

Вместо использования куки вы не можете использовать ajax-вызов для входа в систему, который просто возвращает значение «authcookie». Значение может быть сохранено с использованием localStorage или аналогичного.

http://dev.w3.org/html5/webstorage/

Позже, когда вы захотите извлечь что-то, вы можете отправить это значение на сервер, используя пользовательский заголовок (X-аутентификация или аналогичный), или просто добавить его в качестве GET-переменной к URL-адресу.

0 голосов
/ 23 февраля 2011

Я не совсем уверен, что вы подразумеваете под локальным веб-приложением. Я предполагаю, что это веб-сервер HTTP, работающий на localhost.

Если это так, вам необходим некоторый протокол для связи между http://localhost и http://yourwebsite.com,, и этот протокол должен помочь localhost аутентифицировать пользователя через yourwebsite.com. Я думаю, что OAuth может быть тем, что вы ищете.

При первом обращении пользователя к вашему локальному веб-приложению он будет перенаправлен на yourwebsite.com для аутентификации. После этого yourwebsite.com вернет его с токеном OAuth. Убедившись, что токен действителен с yourwebsite.com, localhost может обслуживать пользователя самостоятельно.

...