Я разработал свое собственное веб-приложение OAuth2 / OIDC, используя IdentityServer4, который работает нормально.Это на https://myauthservice.com
У меня есть отдельный веб-сайт, который является зарегистрированным клиентом моей службы IdentityServer4 и расположен по адресу https://mywebsite.com.
- . Оба веб-сайта созданы с использованием ASP.NET Core 2.1.
- На
/
(домашняя страница) https://mywebsite.com не применяются правила авторизации. - Однако, если пользователь уже вошел в систему
if( this.User.Identity.IsAuthenticated )
, он перенаправляется на страницу своей учетной записи (/account
), которая имеет правило авторизации, если пользователь не авторизован (например, потому что он 'не прошли проверку подлинности) они перенаправляются на страницу входа https://myauthservice.com's с набором returnURL
. - На домашней странице также есть ссылка HTML
<a href="/account">Login to your account</a>
, которая при нажатии приводит к описанному выше процессу входа в систему.
Проблема в том, что если посетитель уже вошел в систему https://myauthservice.com, но еще не посетил https://mywebsite.com, то он перенаправляется наhttps://myauthservice.com's страница входа, которая видит, что они уже аутентифицированы (проверяя файлы cookie myauthservice.com
) и перенаправляет их обратно на https://mywebsite.com с правом access_token
.
Я хочу исключить этот шаг, чтобы пользователи на https://mywebsite.com не увидели страницу «Вход в свою учетную запись» и не перенесли два перенаправления браузера, если они уже вошли в систему https://myauthservice.com -но https://mywebsite.com не будет иметь access_token
пользователя, так чтоe решение?
Я понимаю, что у меня может быть скрытая <iframe>
на https://mywebsite.com's домашняя страница /
, которая указывает на https://myauthservice.com's страницу входа (с установленным returnURL
), которая будетверните access_token
правильно, и тогда клиентский скрипт обнаружит его и автоматически перенаправит пользователя на страницу /account
, но это также похоже на хак.
Другой вариант - изменить процесс входа в системуна https://myauthservice.com, чтобы включить скрытый реверс <iframe>
, который заставляет браузер отправлять access_token
на всем веб-сайтам, которым я доверяю (не только * 1071)* чтобы получить правильные куки заранее, поэтому, когда они в конечном итоге посетят https://mywebsite.com, они уже будут иметь аутентичные куки и будут перенаправлены на /account
при первом запросе.
Какое руководство отдля этого сценария существует команда IdentityServer4 или сообщество OAuth2 / OIDC?
Обновление: теперь я понимаю, что в основном спрашиваю, как реализовать настоящий единый вход с помощью IdentityServer4.StackExchange решил эту проблему еще в 2010 году: https://stackoverflow.blog/2010/09/11/global-network-auto-login/ - мне нужно посмотреть, как они это сделали.