【发布时间】:2019-04-05 19:08:03
【问题描述】:
我在现有的 aspnet 核心 mvc Web 应用程序中添加了 JWT 身份验证,以保护移动应用程序的 api。
我使用 Multi auth 和 MultiPolicies 进行授权(带有身份和 JWT 的 Cookie),我使用 postman 和移动应用程序在 localhost 上对其进行了测试,它运行良好。但是当我将它部署到我的远程服务器时,我不起作用。身份验证和令牌生成有效,但是当我使用 httpget 请求访问 api 时,我会重定向到 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"));
});
这是使用邮递员登录 localhost 的屏幕截图。 这是使用带有生产环境的邮递员登录。 这是 localhost 上的请求,它有效,我得到了 json 结果。 在这里,我得到了对 mvc 登录页面的重定向。
【问题讨论】:
标签: asp.net-core-mvc jwt authorization asp.net-core-2.1