Как я могу аутентифицировать и авторизовать Angular получить или опубликовать запросы, используя AspNetCore 2.2? - PullRequest
0 голосов
/ 17 января 2019

Я настроил угловой проект dotnet, а затем реализовал аутентификацию, как показано ниже в файле StartUp.cs.

public void ConfigureServices(IServiceCollection services)
{

    services.AddScoped<IPasswordHasher<CustomUser>, 
        PasswordHasherWithOldMembershipSupport<CustomUser>>();

    services.AddIdentity<CustomUser, IdentityRole>()
        .AddEntityFrameworkStores<AuthenticationContext<CustomUser>>()
        .AddDefaultUI()
        .AddDefaultTokenProviders();

    var connection = configuration.GetConnection("Authentication");
    services.AddDbContext<AuthenticationContext<CustomUser>>(options =>
        options.UseSqlServer(connection));

    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<AuthMessageSender.ISmsSender, AuthMessageSender>();


    }

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseAuthentication();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller}/{action=Index}/{id?}");
    });
    ...
 }

Файл IdentityHostingStartUp.cs, который запускается при запуске для настройки аутентификации.

public class IdentityHostingStartup : IHostingStartup
{
    public void Configure(IWebHostBuilder builder)
    {
        builder.ConfigureServices((context, services) =>
        {
            services.AddAuthentication();
            services.Configure<IdentityOptions>(options =>
            {
                // Password settings.
                options.Password.RequireDigit = true;
                options.Password.RequireLowercase = true;
                options.Password.RequireNonAlphanumeric = true;
                options.Password.RequireUppercase = true;
                options.Password.RequiredLength = 6;
                options.Password.RequiredUniqueChars = 1;

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

                // User settings.
                options.User.RequireUniqueEmail = false;
            });

            services.ConfigureApplicationCookie(options =>
            {
                // Cookie settings
                options.Cookie.HttpOnly = true;
                options.ExpireTimeSpan = TimeSpan.FromMinutes(15);

                options.LoginPath = "/Identity/Account/Login";
                options.AccessDeniedPath = "/Identity/Account/AccessDenied";
                options.SlidingExpiration = true;
            });
        });
    }
}

У меня есть пользовательское перенаправление в моем угловом коде, чтобы перейти на страницу аутентификации, если пользователь не вошел в систему.

import { Inject, Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class AuthService {
  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {

    http.get<Boolean>(baseUrl + "api/Home/Status").subscribe((authenticated) => {
      if (!authenticated) {
        window.location.href = baseUrl + "/Identity/Account/Login";
      }
    });
  }

И, наконец, мой код HomeController для проверки статуса авторизованного пользователя.

[HttpGet("[action]"), AllowAnonymous]
public Boolean Status()
{
    var user = _accessor.HttpContext.User;
    return User.Identity.IsAuthenticated;
}

Действие Status (или любое другое вызванное действие контроллера api) всегда имеет нулевое имя пользователя, утверждения пользователя, а IsAuthenticated всегда возвращает false даже после входа в систему.

Это доводит меня до стены. Я прочитал столько постов и перепробовал столько вариантов, сколько смог найти, и, похоже, ничего не работает.

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

1 Ответ

0 голосов
/ 18 января 2019

Это происходит, когда для ваших параметров отладки установлено значение EnableSSL, что не отмечено. Это также может стать проблемой, если вы будете развертывать без включенного SSL. Как только я включил SSL, как показано на рисунке ниже, cookie-запрос приложения был включен в запросы ajax.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...