2017-02-03 5 views
0

В настоящее время я столкнулся со следующей проблемой:JWT: обработка токена аутентификации на многодоменном уровне

Я строй приложения с автономным видом входа. Предположим, что они оба работают на разных доменах. Мой вид входа связывается с службой REST на сервере, которая выдает токен JWT.

С помощью этого выданного токена пользователь должен теперь иметь возможность просматривать (перенаправлять) приложение. Но это приложение - как уже упоминалось - работает на другом домене (или поддомене, возможно).

На мой взгляд, я попробовал следующее:

  1. Токен выдается сервером. Хэш хранится в базе данных, и хэш выдается пользователю. Хэш передается в приложение по URL-адресу, и приложения проверяют хеш.

  2. Токен выдается сервером. Токен передается пользователю. Когда пользователь теперь открывает приложение (или отправляется на ...), там же должен быть перенесен токен. Я не знаю, как это сделать ...

Оба не идеальные способы, я знаю. Но я действительно не знаю, как я могу это достичь ...

Я надеюсь, что кто-нибудь сможет мне помочь с моими мыслями? Если что-то неясно, просто прокомментируйте.

Заранее благодарен!

ответ

1

Facebook, Twitter, Google и т. Д. Предлагают OAuth путем перенаправления (302 запроса на переадресацию). В основном ваше приложение запускается, если у пользователя есть действительный токен, все в порядке, иначе он откроет страницу входа из поставщика удостоверений (например, Google) и вернет токен, если логин был успешным.

Этого рисунок показывает основные этапов:

https://www.soapui.org/soapui/media/images/stories/oauth2/oauth2flow.png

Надеется, что это помогает.

Предположим, у вас есть две службы в двух разных доменах. Один из них - ваш поставщик удостоверений, который генерирует токены и удерживает токен < -> пользовательское назначение (назовем его: idp.my.company). Другой - любое приложение, которое делает что-то, но ему нужно войти в систему через idp.my.company (мы называем его app.my.company).

У вас есть два сценария: 1. Вход без наличия маркера. 2. Войдите с помощью токена.

  1. Запрос GET: app.my.company

  2. Ответ 302: Переехал: idp.my.company

    • Посмотрите, какой тип переадресации следует вашим потребностям (307, может быть) https://en.wikipedia.org/wiki/URL_redirection
    • Вам необходимо добавить информацию, куда перенаправить обратно. В этом случае app.my.company.
  3. [Это происходит автоматически из-за перенаправления] GET: idp.my.company/login.html.

  4. Ответ 200 OK: idp.my.company/login.html

    • Пользователь будет теперь видеть Вход-страницу вашего IDP-службу и выполнить Логин.
  5. Запрос POST: idp.my.company/login.html (или любой другой)

    • пользователя сообщения верительные грамоты aquire лексема
  6. Response 302 редиректа: Если логин успешно завершен, возвращает токен и теперь перенаправляется на исходный сайт (app.my.company), который вы предоставили ранее.

  7. Запрос GET: app.my.company/afterlogin.html

    • Заголовок содержит действительный маркер
  8. Ответ 200 OK: Теперь сервис app.my.company должен проверьте, является ли токен действительным, и если true return 200 Ok, иначе переадресовываем снова в IDP (начинаем с шага 2).

Это должно быть все. Могут быть ошибки, но вы должны иметь согласованную картину процесса и понять, как его реализовать. Эти шаги охватывают сценарии 1 и 2.

+0

Фактически «Я» - поставщик удостоверений. Я не буду использовать внешние службы :-( – sebastian

+0

Да, я знаю, но решение было бы таким же. Было бы легко интегрироваться. У меня такая же проблема в моей компании в данный момент, и вы просто помогли мне решить мою проблему:). Где ваша проблема в понимании этого подхода? Может быть, я могу быть более конкретным. – sascha10000

+0

Если я понимаю вас правильно: 1. Если пользователь открывает приложение и имеет действительный токен, все в порядке. 2. Если у пользователя НЕ установлен действительный токен, он перенаправляется на логин (пока здесь: штраф!), Регистрируется с учетными данными и получает выданный токен. Значок JWT? Как этот токен затем «переносится» обратно в приложение? Как произойдут 302? Я просто делаю вход с полимером ... – sebastian

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