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

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

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

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

1
Rix 14 Сен 2018 в 21:06

2 ответа

Лучший ответ

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

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

1
mackie 16 Сен 2018 в 06:54

После успешного входа в систему промежуточное ПО 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
Peppin0 9 Ноя 2018 в 11:09