Обновите идентификатор токена до истечения срока его действия в Aspnet Core MVC - PullRequest
0 голосов
/ 09 июля 2019

Я работаю над проектом MVC ядра aspnet, который вызывает API, защищенный OAuth2.0.

Мне удалось получить доступ к API и получить ответ правильно с помощью приведенного ниже кода,

Startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            })
            .AddCookie()
            .AddOpenIdConnect(options =>
            {
                options.Authority = Configuration["AzureAD:Instance"] + 
                 "/" + Configuration["AzureAD:TenantId"];
                options.ClientId = Configuration["AzureAD:ClientId"];
                options.Secret = Configuration["AzureAD:Secret"];
                options.Callback = Configuration["AzureAD:Callback"];
                options.ResponseType = "code id_token";
                options.SaveTokens = true;
            });

        services.AddMvc(options =>
            {
                var policy = new AuthorizationPolicyBuilder()
                    .RequireAuthenticatedUser()
                    .Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    }

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ...
        app.UseCookiePolicy();
        app.UseAuthentication();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "sign-in",
                template: "signin-oidc")};


            ...

    });
    }

Controller.cs

Я получаю токен из HttpContext.

Но токен истекает через несколько часов.Есть ли способ обновить идентификатор токена до его истечения.Я пробовал несколько примеров переполнения стека.Но никто не работал для меня.

Есть ли способ заставить это работать без использования IdentityModel, использованного в примере ниже?https://github.com/mderriey/aspnet-core-token-renewal/blob/master/src/MvcClient/Startup.cs

1 Ответ

0 голосов
/ 10 июля 2019

Вам не нужно обновлять идентификатор токена.Идентификационный токен содержит информацию о конечном пользователе. Как только ваше клиентское приложение получит идентификационный токен от поставщика OpenID, оно проверит токен, расшифрует токен и войдет в систему, используя аутентификацию cookie.Информация пользователя сериализуется и сохраняется в файле cookie приложения, который будет отправляться при каждом следующем запросе от браузера для сохранения основной информации профиля пользователя и статуса аутентификации.

По умолчанию файл cookie создается с временем жизни на основе сеанса, то есть до тех пор, пока браузер / вкладка не будет закрыта.Таким образом, токен id будет использоваться в первый раз, а затем будет использоваться аутентификация cookie.

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

В статье, которую вы предоставляете, показано, как обновить токен доступа и как настроить время жизни ASP.NET.cookie сеанса с токеном доступа OIDC (контролирует время существования cookie).Это не сильно связано с вашим сценарием.

...