Как реализовать Ember Simple Auth с использованием внешнего перенаправления - PullRequest
0 голосов
/ 08 декабря 2018

Вот мой рабочий процесс.

  1. Пользователь нажимает кнопку входа в систему.
  2. Пользователь перенаправляется на API, который перенаправляет на страницу входа на стороннем сайте (ADFS SAML).
  3. Пользователь аутентифицируется там, возвращается в API, который декодирует ответ, создает пользователя и токен JWT (оба хранятся в хранилище данных), а затем перенаправляет пользователя в Ember с параметром запроса ?token=.

То, что я хотел бы сделать, это перенести это в пользовательский ember-simple-auth authenticatorauthorizer?), Чтобы воспользоваться преимуществами заголовков сеанса и авторизации изтам.

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

Есть мысли?Это то, для чего ember-simple-auth-token предназначен?

1 Ответ

0 голосов
/ 10 декабря 2018

Я решил это в прошлом месяце.то, что я сделал, было

  1. нажмите логин
  2. перенаправить на adfs
  3. adfs логин успешно-> перенаправить на мой бэкэнд
  4. backend создатьтокен sso temp с данными токена доступа, который уже существует и действителен только в течение 2 минут.
  5. веб-сервер перенаправления с GET с параметрами sso temp token * внешний интерфейс 1012 *
  6. принимает параметры токена sso tempи сделать еще один пост-запрос AJAX для бэкенда
  7. Api проверит токен sso temp и предоставит детали (токен доступа и токен обновления) пользователю
  8. прочитает данные ответа на запрос поста в 6 и обновитв ember простой сервис аутентификации с использованием интерфейса authenticate (вы можете настроить его с помощью пользовательского аутентификатора)

вот пользовательский класс аутентификатора

import Base from 'ember-simple-auth/authenticators/base';
import {isEmpty} from '@ember/utils';
export default Base.extend({
  authenticate(data) {
    return new Promise((resolve, reject) => {

      if(data.access_token!=null){
        resolve({
          scope: data.scope,
          access_token: data.access_token,
        });
      }else{
        reject();
      }  })

    },

    restore(data) {
      return new Promise((resolve, reject) => {
        if (!isEmpty(data.access_token)) {
          resolve(data);
        } else {
          reject();
        }
      });
    },

  });

, который я создалмаршрут для обработки во внешнем интерфейсе для получения токена, отправляемого бэкэндом.поэтому маршрут принимает sso-токен с помощью параметра get (потому что backend не может выполнить публикацию в emberapp), поэтому, когда запускается маршрут, я перехватываю параметр в маршруте и снова выполняю метод post для проверки токена.

мыс использованием сгенерированных токенов.поэтому, так как этот вопрос задают о emberjs, я проиллюстрировал ответ, чтобы поддержать вас в веб-интерфейсе.Я должен проиллюстрировать концепцию, чтобы показать, что вам нужно делать.так что это зависит от вас, чтобы выкопать и узнать больше об этом.например, как создать временный токен JWT, как его проверить, как перенаправить вас на ваш бэкэнд с заявками от adfs и т. д. Я думаю, что я даю ответ на первоначальный вопрос, который вы задали, а именно: «Как реализовать Ember Simple Authс использованием внешнего перенаправления "

...