IdentityServer4 как перенаправить поток после входа в систему - PullRequest
0 голосов
/ 14 сентября 2018

Я установил IdentityServer4 и клиент (гибридный клиент Mvc). Все нормально. Работает следующий поток:
1. Безопасная страница вызова пользователя PageX (контроллер защищен атрибутом Authorize)
2. чем система перенаправляет поток на страницу входа в систему на IdentityServer
3. После аутентификации / авторизации IdentityServer перенаправляет пользователя на определенный URL (redirect_uri) в конфигурации клиента (страница с именем Home).

Теперь я не знаю, как реализовать на шаге 3 перенаправление на PageX, запрошенную исходную страницу.

Мне нужно создать собственный атрибут AuthorizeAttribute, чтобы сохранить в хранилище сеанса URL-адрес PageX и чем использовать его на странице обратного вызова? или на IdentityServer или клиенте есть какая-либо конфигурация, которая может мне помочь?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

После успешного входа в систему, по умолчанию промежуточное ПО IdentityServer пытается перенаправить на страницу согласия, где информировать пользователя о «разрешенных областях». На этой странице показаны утверждения о том, что клиентский сайт MVC получит доступ к: идентификатору пользователя, профилю пользователя, электронной почте и т. Д. Если вы не настроили такое, вы можете установить: «RequireConsent = false» при определении клиента MVC. В этом случае IdentityServer будет перенаправлен обратно на «RedirectUris», не показывая страницу согласия.

Пример:

public static IEnumerable<Client> GetClients()
{
    return new List<Client>
    {
        new Client
        {
            ClientId = "mvc",
            ClientName = "mvc Client",
            ClientSecrets =
            {
                new Secret("secret".Sha256())
            },
            AllowedGrantTypes = GrantTypes.Implicit,
            AllowAccessTokensViaBrowser = true,
            RedirectUris = { "http://localhost:5002/signin-oidc" },
            PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
            AllowedScopes =
            {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
                IdentityServerConstants.StandardScopes.Email
            },
            RequireConsent = false
        }
    };
}

Еще одна вещь, которую я заметил в демонстрациях и быстрых запусках IdentityServer4, это то, что вам нужны следующие пакеты NuGet: Для сайта клиента: IdentityModel, Microsoft.AspNetCore.All

Для приложения аутентификации IdentityServer: IdentityServer4, IdentityServer4.AccessTokenValidation, IdentityServer4.AspNetIdentity, Microsoft.AspNetCore.All

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

0 голосов
/ 16 сентября 2018

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

Я бы рекомендовал защитить значение от несанкционированного доступа, используя функции DataProtection в .net.

...