2016-06-22 4 views
-3

Есть ли способ проверить статус входа в систему на разных языках программирования? Сейчас я использую три сеанса (одно и то же имя), которые запускаются одновременно после процесса входа в систему, используя ajax.Безопасность с помощью различных языков программирования

Прямо сейчас, login.html форма обрабатывается на три файла: login.aspx, login.asp и login.php, но это, кажется, слишком медленно и странно. Я объединяю три разные службы от одной и той же компании в одной, после повторного создания пользователей и других общих таблиц в mysql, все работает нормально, но я действительно боюсь ошибок безопасности.

Чтобы сообщить вам, я должен проверить статус сеанса входа перед любым обратным вызовом ajax, поэтому, если пользователь работает на странице ASP, вызывающей PHP через Ajax, может быть, что сеанс по-прежнему активен в ASP , но истек в файле php.

Любой действительный метод для проверки всего за один раз? Я также могу принять решение cookie, но как сделать его доступным для чтения между php, asp и .net?

+2

Почему бы не сделать все, чтобы перенаправить на одну страницу? (login.aspx) – Aristos

+6

Определенно проблема XY - все ваши проверки подлинности проходят через один центральный пункт, на любом языке, который вы предпочитаете – Steve

+0

@Aristos Почему? Я имею в виду, я дождался login.aspx, login.asp и login.php answere, а затем я сделал перенаправление. – Vixed

ответ

7

Это звучит как единый вход для меня. Попробуем разделить проблему.

Есть ли способ проверить статус входа в систему на разных языках программирования?

Вас не интересует используемый язык. Любой язык, с учетом той же информации и алгоритма, будет успешно декодировать одни и те же зашифрованные данные. Я предполагаю, что у вас проблемы, потому что логика приложения PHP в отношении этой точки отличается от ASP. Так для первой точки, вы можете

  • Реализовать/нормализуют же сеанс проверки логики среди всех ваших приложений. Это, вероятно, невозможно, потому что вы можете использовать Laravel здесь, а ASP.Net - с другой, и в этом отношении, возможно, немного разные. Если вы можете, сделайте это, или ...

  • Посмотрите на токены JSON. Я не буду вдаваться в подробности, но они были более или менее разработаны для решения этого класса проблем. Они также просты в обращении, но имейте в виду, что есть аспекты, которые вы должны соблюдать при их использовании для аутентификации пользователей.

[...] Просто, чтобы вы вы знаете, я должен проверить состояние сеанса Логина перед любым AJAX обратного вызова, так что если пользователь работает на странице ASP вызывающей PHP через Ajax, может что сеанс все еще активен в ASP, но истек в файле php.

Не быть таким парнем, но некоторые концепции здесь несколько деформированы. Сессии не заканчиваются на файлах; они обычно устанавливаются с заданным временем истечения срока действия и данным доменом. Итак, вообще говоря, сеанс, открытый из приложения PHP, и хранящийся в cookie, затем прочитайте его из ASP, который нельзя изменять, учитывая, что между логикой обработки сеанса не существует никакой разницы.

Любой действующий метод для проверки всего за один раз? Я также могу принять решение cookie, но как сделать его доступным для чтения между php, asp и .net?

Для обоих решений, которые я предложил выше, особенно для файлов cookie, важно, чтобы приложения абсолютно идентичны в отношении обработки сеанса. Хотя это тривиально с JWT (поскольку на стороне приложения практически нет логики), это может оказаться сложнее с куками, если логика аутентификации исходит из кода какого-либо другого (как в рамках). Я не спрашивал об одном выводе, и на данный момент я боюсь спросить :). Но это некоторые рекомендации:

  • Если вы идете по маршруту печенья, помните о домене печенья. Файл cookie обычно действителен для каждого запроса, поступающего из домена веб-сайта (name.com), но у вас могут быть некоторые из ваших приложений под субдоменом (например, phpapp.name.com). В этом случае убедитесь, что файл cookie, созданный из данного приложения, действителен для домена всего, а не только для субдомена. И сделать приложения доступными на поддоменах/страницах в одном домене. Куки-файлы не работают в кросс-домене, и вам приходится иметь дело с этим, поскольку политика домена cookie применяется на уровне браузера.

  • Запуск трех вызовов AJAX означает три процедуры входа в систему. Я предполагаю, что все это закончится в какой-то момент в будущем, и все они будут хранить/переписывать cookie. Если приложения понимают один и тот же файл cookie, вам необходимо открыть процесс регистрации на всего один из них. Это сохранит файл cookie, который затем будет автоматически выбран из, скажем, страницы во втором приложении, что обеспечит вам плавный переход в состояние входа во второе приложение.

  • JWT обычно требует некоторой работы JS, что вам может понравиться, так как тот же скрипт можно легко загружать во все ваши приложения. С другой стороны, вы можете быть уверены, что разные серверные библиотеки, обрабатывающие JWT, будут работать одинаково для вас, обеспечивая совместимость.

Лично я бы рассмотрел JSON Web Tokens.

+0

Привет, мне очень нравится ваш ответ, и я начну читать что-то о JSON Web Tokens. Единственная проблема, похоже, в том, что мне придется настраивать nodeJS на IIS, о чем я рассказал компании много лет назад ... но .. вы знаете oO – Vixed

+0

@Vixed .. да, я знаю -.- ' К счастью от IIS уже несколько лет. Тем не менее, похоже, что вы можете обойтись без node.js? Я знаю, что есть [расширение] (https://msdn.microsoft.com/en-us/library/dn205065 (v = vs.110) .aspx), или вы можете [реализовать его] (http: // bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/) самостоятельно (если мы говорим .NET) – sixFingers

3

Вы можете создать собственный поставщик сеансов, который хранит данные в отдельном месте (например, в базе данных или файлах). Затем все, что вам нужно сделать, это написать код в каждой среде, чтобы обрабатывать информацию о сеансе от этого провайдера. Поскольку вы используете только один источник для хранения информации о сеансе, никаких проблем с синхронизацией между любой вашей средой не возникнет.

Если вам нужно, вы можете использовать веб-сервис для обмена информацией о сеансах между каждой средой и поставщиком сеанса. Каждое приложение может использовать соединение безопасности для получения и установки информации о сеансе из этого сеанса webservice.

1

Я думаю, вы можете это сделать! Вы можете создать провайдера, который хранит данные в базе данных. Затем напишите какой-нибудь классный код для управления вашим провайдером. Вы также можете использовать webapp или sevice. Каждый сервис использует безопасность для получения и размещения информации.

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