IdentityServer4 - объединение MVC и SPA - избегайте дополнительного обхода

У меня есть веб-сайт, который сочетает в себе ASP.NET Core MVC и угловой SPA, который я пытаюсь защитить с помощью IdentityServer4. В настоящее время поток входа выглядит так:

  1. Пользователь нажимает кнопку входа на главной странице (www.example.com, на основе MVC)
  2. Пользователь перенаправляется на страницу входа (login.example.com, на основе MVC) и входит в систему
  3. Пользователь перенаправляется на www.example.com/app, где сайт обнаруживает, что у него нет файла cookie для пользователя, поэтому он перенаправляет пользователя на конечную точку login.example.com/connect/authorize.
  4. Пользователь перенаправляется обратно на сайт с id_token на www.example.com/signin-oidc, который удаляет cookie
  5. Затем пользователь, наконец, перенаправляется на сайт www.example.com/app, который должен показать SPA

Проблема заключается в том, что когда это наконец сделано, SPA нужен токен доступа, чтобы он мог вызывать API. Я попытался использовать библиотеку angular-auth-oidc-client, проблема в том, что она ждет, пока все угловое приложение загрузит приложение, только чтобы узнать, что у него нет токена доступа, и сделать еще одно перенаправление на login.example.com. / подключить / авторизовать конечную точку для получения токена.

Есть ли более простой способ сделать это? Т.е. перенаправить пользователя в приложение с токеном доступа на шаге 5? Или выбрать совершенно другой подход к личности?

1 ответ

Во-первых, после шага 2 пользователь должен войти в систему, а затем шаг 4, почему 3, не звучит правильно. Этот сценарий должен обрабатываться гибридным потоком, и когда выполняется шаг 4, клиентское приложение должно иметь токен идентификатора и токен доступа. Теперь у вас должны быть контроллеры, где вы можете получить доступ к "токену доступа". Вы можете создать базовый класс, который возвращает httpclient с установленными заголовками.

И все ваши звонки из приложения angular должны проходить через эти контроллеры, которые будут вызывать apis вашего сервера.

Другие вопросы по тегам