Я добавил аутентификацию JWT в мое существующее веб-приложение mvc для ядра aspnet, чтобы защитить API для мобильного приложения.
Я использовал Multi auth и MultiPolicies for Authorization (Cookies с идентификацией и JWT), я протестировал его на localhost, используя почтальон и мобильное приложение, и он отлично работает.но когда я развернул его на своем удаленном сервере, я не работал.Аутентификация и генерация токенов работают, но когда я получаю доступ к API с помощью запроса httpget, я получаю перенаправление на страницу входа в систему mvc.Мой Startup.cs содержит это:
services.AddAuthentication().AddCookie(options =>
{
options.Cookie.HttpOnly = identityDefaultOptions.CookieHttpOnly;
options.Cookie.Expiration = TimeSpan.FromDays(identityDefaultOptions.CookieExpiration);
options.LoginPath = identityDefaultOptions.LoginPath; // If the LoginPath is not set here, ASP.NET Core will default to /Account/Login
options.LogoutPath = identityDefaultOptions.LogoutPath; // If the LogoutPath is not set here, ASP.NET Core will default to /Account/Logout
options.AccessDeniedPath = identityDefaultOptions.AccessDeniedPath; // If the AccessDeniedPath is not set here, ASP.NET Core will default to /Account/AccessDenied
options.SlidingExpiration = identityDefaultOptions.SlidingExpiration;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = tokenValidationParameters;
options.Audience = jwtAppSettingsOptions[nameof(JwtIssuerOptions.Audience)];
options.RequireHttpsMetadata = bool.Parse(jwtAppSettingsOptions[nameof(JwtIssuerOptions.RequireHttpsMetadata)]);
});
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new RequireHttpsAttribute());
config.Filters.Add(new AuthorizeFilter(policy));
}).AddJsonOptions(opt =>
opt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver())
.AddJsonOptions(opt => opt.SerializerSettings
.ReferenceLoopHandling = ReferenceLoopHandling.Ignore).AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
// Add support for localizing strings in data annotations (e.g. validation messages) via the
// IStringLocalizer abstractions.
.AddDataAnnotationsLocalization();
services.AddAuthorization(options =>
{
options.AddPolicy("ApiUserPolicy", policy => policy.RequireClaim("JwtRole", "ID"));
});
Это скриншот для входа в систему с локальным хостом с почтальоном. Это логин с использованием почтальона с продукцией env. Вот запрос на localhost, и он работает, я получил результат json. И вот я получил это перенаправление на страницу входа в mvc.