Должен ли SSO, использующий IdentityServer4, попадать в конечную точку авторизации при каждом запросе? - PullRequest
0 голосов
/ 05 февраля 2019

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

+-----+--------------------+-------------------------------------+---------------------------------------------------------------------+
| Seq |        Host        |               Request               |                              Response                               |
+-----+--------------------+-------------------------------------+---------------------------------------------------------------------+
|   1 | apple.example.com  | GET /About                          | 302 Found; Location=https://login.example.com/connect/authorize?... |
|   2 | login.example.com  | GET /connect/authorize?...          | 302 Found; Location=https://login.example.com/Account/Login?…       |
|   3 | login.example.com  | GET Account/Login?…                 | 200 OK                                                              |
|   4 | login.example.com  | POST /Account/Login?...             | 302 Found; Location=/connect/authorize/callback?...                 |
|   5 | login.example.com  | GET /connect/authorize/callback?... | 200 OK                                                              |
|   6 | apple.example.com  | POST /signin-oidc                   | 302 Found; Location=https://apple.example.com/About                 |
|   7 | apple.example.com  | GET /About                          | 200 OK                                                              |
|   8 | banana.example.com | GET /About                          | 302 Found; Location=https://login.example.com/connect/authorize?... |
|   9 | login.example.com  | GET /connect/authorize?...          | 200 OK                                                              |
|  10 | banana.example.com | POST /signin-oidc                   | 302 Found; Location=https://banana.example.com/About                |
|  11 | banana.example.com | GET /About                          | 200 OK                                                              |
|  12 | banana.example.com | GET /About                          | 200 OK                                                              |
|  13 | banana.example.com | GET /About                          | 200 OK                                                              |
|  14 | apple.example.com  | GET /About                          | 302 Found; Location=https://login.example.com/connect/authorize?... |
|  15 | login.example.com  | GET /connect/authorize?...          | 200 OK                                                              |
|  16 | apple.example.com  | POST /signin-oidc                   | 302 Found; Location=https://apple.example.com/About                 |
|  17 | apple.example.com  | GET /About                          | 200 OK                                                              |
|  18 | apple.example.com  | GET /About                          | 200 OK                                                              |
+-----+--------------------+-------------------------------------+---------------------------------------------------------------------+

До Seq = 11 все работает как положено.Я вошел в оба сайта (яблоко и банан), но только один раз ввел свои учетные данные.Я в последний раз загружал страницу на banana.example.com.Пока я остаюсь на этом сайте (строки 12 и 13), файл cookie сайта работает.Но если я загружаю другую страницу на apple.example.com, она возвращает меня к конечной точке авторизации, даже если я уже аутентифицирован на этом сайте.Это удивительно для меня.Это продолжает происходить - каждый раз, когда я переключаю сайты, мне приходится снова подключаться к серверу идентификации.Мне не нужно повторно вводить свои учетные данные, но перенаправления немного раздражают.Я особенно обеспокоен тем, что это будет мешать запросам POST.

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

Это так, как это должно работать, или что-то не так с моей конфигурацией?Я ожидаю, что нужно будет только один раз попасть в конечную точку авторизации для каждого сайта.

1 Ответ

0 голосов
/ 06 февраля 2019

Ваши ожидания верны.Убедитесь, что вы используете разные имена файлов cookie для каждого приложения, иначе это приведет к точному поведению, которое вы описываете.

Вы можете установить имя файла cookie в конфигурации службы аутентификации:

services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; })
        .AddCookie(options =>
        {
            options.Cookie.Name = "someCookieName";
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...