Blazor cookie-аутентификация - PullRequest
       49

Blazor cookie-аутентификация

0 голосов
/ 31 октября 2019

Пожалуйста, помогите мне, я не знаю, что может быть не так, я пытался найти что-то в течение нескольких часов ...

Я хочу, чтобы компонент cookie пользователя входил в cookie в Blazor. Мне нужна возможность получать информацию из cookie во всех местах моего приложения.

В моем Startup.cs я добавил в ConfigureServices:

services.Configure<CookiePolicyOptions>(options =>
            {
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();
services.AddHttpContextAccessor();
services.AddScoped<HttpContextAccessor>();
services.AddHttpClient();
services.AddScoped<HttpClient>();

в Configure before endpoint

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();

Затем в приложении я создал код для входа

public async Task Login()
{
    var claims = new List<Claim> {
        new Claim(ClaimTypes.Name, "1", ClaimValueTypes.String),
        new Claim(ClaimTypes.Surname, "2", ClaimValueTypes.String),
        new Claim(ClaimTypes.Country, "3", ClaimValueTypes.String),
        new Claim("4", "4.1", ClaimValueTypes.String)
    };

    var userIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
    var authProperties = new AuthenticationProperties
        {
            ExpiresUtc = DateTime.UtcNow.AddMinutes(20),
            IsPersistent = false,
            AllowRefresh = false
        };
    var userPrincipal = new ClaimsPrincipal(userIdentity);

    await _httpContextAccessor.HttpContext.SignInAsync(
          CookieAuthenticationDefaults.AuthenticationScheme, 
          userPrincipal);
}

, но в моем браузере нет файлов cookie, нет ошибок в коде / консоли.

Когда я смотрю на статус из

var z= _httpContextAccessor.HttpContext.SignInAsync(
                CookieAuthenticationDefaults.AuthenticationScheme, 
                userPrincipal).Status

, я получаю сообщение об ошибке

System.Threading.Tasks.TaskStatus.Faults info.

Кто-нибудь может мне помочь? Мне нужна система аутентификации и авторизации, которая может предоставить мне необходимую информацию о пользователе.

Я буду благодарен за помощь

Спасибо

1 Ответ

0 голосов
/ 31 октября 2019

Является ли это Blazor Server или Blazor WebAssembly?

В любом случае вы не можете использовать HttpContextAccessor в своем приложении.

Этот _httpContextAccessor.HttpContext.SignInAsync не может работать, поскольку HttpContext недоступен в Blazor Server. Нет необходимости говорить, что HttpContext не может быть создан в браузере ...

Либо используйте это: services.AddHttpClient();

, чтобы использовать IHttpClientFactory (рекомендуется)

или это: services.AddScoped<HttpClient>();

Мне кажется, что вы не знакомы ни с Blazor, ни с системой аутентификации и авторизации Blazor. Я бы посоветовал вам ознакомиться с документами и научиться ими пользоваться. Они превосходны и могут сэкономить вам много времени на программирование.

Надеюсь, это поможет ...

...