asp. net core IdentityServer 4 не сохраняется грант с сафари - PullRequest
0 голосов
/ 27 мая 2020

У меня есть приложение wasm asp. net core blazor, которое использует идентификацию 4 для аутентификации. Он настраивается в соответствии с визуальной студией и развертывается в службе приложений azure. Когда я использую это на windows через Edge, он работает должным образом, я могу войти в систему и увидеть новую запись в таблице PersistedGrants, и я могу войти в систему с нескольких компьютеров без проблем.

Когда я знаю вход с любого из них safari на Ma c или в любом браузере на устройстве iOS (поскольку все они используют один и тот же движок браузера) вся таблица PersistedGrants удаляется. Насколько я понимаю, не имеет значения, вхожу ли я в систему с тем же пользователем, у которого уже есть грант, или с другим, все записи удаляются. Процесс входа в систему во всех случаях завершается успешно.

Что касается пакетов, я использую Microsoft.AspNetCore.ApiAuthorization.IdentityServer 3.1.4 и версии Blazor Release.

Мой запуск:

...
services.AddDbContext<ISupportToolContext, SupportToolContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddRoles<ApplicationIdentityRole>()
                .AddEntityFrameworkStores<SupportToolContext>();

        Log.Information($"Identity Server Key Type loaded: {Configuration.GetSection("IdentityServer:Key")["Type"]}");

        services.AddIdentityServer()
                .AddApiAuthorization<ApplicationUser, SupportToolContext>();

        services.AddAuthentication()
                .AddIdentityServerJwt();

        services.Configure<IdentityOptions>(options =>
        {
            // Password settings
            options.Password.RequireDigit = false;
            options.Password.RequiredLength = MIN_PASSWORD_LENGTH;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequireUppercase = false;
            options.Password.RequireLowercase = false;

            // Lockout settings
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(LOCKOUT_DURATION);
            options.Lockout.MaxFailedAccessAttempts = MAX_TRIES_BEFORE_LOCKOUT;
            options.Lockout.AllowedForNewUsers = true;

            // Email Settings
            options.User.RequireUniqueEmail = true;
            options.SignIn.RequireConfirmedEmail = true;
        });

        // Configure LifeSpan of Identity email tokens
        services.Configure<DataProtectionTokenProviderOptions>(options =>
        {
            options.TokenLifespan = TimeSpan.FromDays(IDENTITY_TOKEN_DURATION);
        });

        services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.HttpOnly = false;
            options.Events = new CookieAuthenticationEvents
            {
                OnRedirectToLogin = context =>
                {
                    context.Response.StatusCode = UNAUTHORIZED_STATUS_CODE;
                    return Task.CompletedTask;
                }
            };
        });
        ...

и ClientSide Programm.cs:

        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("app");

        builder.Services.AddBlazoredModal();
        builder.Services.AddI18nText();
        builder.Services.AddAuthorizationCore();

        // Service registration
        ...

        builder.Services.AddHttpClient("ApplySupportTool.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
               .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

        // Supply HttpClient instances that include access tokens when making requests to the server project
        builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("ApplySupportTool.ServerAPI"));

        builder.Services.AddApiAuthorization();
        builder.Services.AddOptions();

        await builder.Build().RunAsync();

и в индексе. html:

<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script>
<script src="_framework/blazor.webassembly.js"></script>

Может ли кто-нибудь указать мне, что это может быть или как я могу узнать больше?

...