Я пытаюсь начать аутентификацию в веб-приложении ASP.NET Core 2.0.
Моя компания использует Ping Federate, и я пытаюсь аутентифицировать своих пользователей, используя страницу входа компании и, в свою очередь, проверяювозвращенный токен, используя мой ключ подписи (X509SecurityKey
здесь).
Ссылка на страницу входа выглядит так:
https://companyname.com/authorization.oauth2?response_type=code&redirect_uri=https%3a%2f%2fJWTAuthExample%2fAccount%2fLogin&client_id=CompanyName.Web.JWTAuthExample&scope=&state=<...state...>
Из коробки я настроилStartup.cs, чтобы иметь возможность войти в систему и бороться с этим сайтом.
Я украсил свой HomeController [Authorize(Policy="Mvc")]
, но когда я захожу на одну из страниц, я просто получаю пустую страницу.
Отладка не затрагивает методы OnChallenge
или OnAuthenticationFailed
, когда я добавляю ее в options.Events
(я думаю, потому что пользователь должен сначала пройти аутентификацию).
Итак, чего мне не хватает в порядкедля перенаправления на мой сайт аутентификации?Он встроен или мне нужно выполнить какую-либо ручную настройку?
(Примечание: в других веб-приложениях, использующих asp net framework, я использую перенаправление в атрибуте Authorize при сбое аутентификации)
Связанный пост: Атрибут Authorize не перенаправляет на страницу входа при использовании AddJwtBearer .NET Core 2 - Означает ли это, что я не использую правильный метод аутентификации?Я создаю веб-приложение, а не API.
namespace JWTAuthExample
{
public class Startup
{
public Startup(IConfiguration configuration, IHostingEnvironment hostingEnvironment)
{
Configuration = configuration;
HostingEnvironment = hostingEnvironment;
string certificatepath = Path.Combine(HostingEnvironment.ContentRootPath, $"App_Data\\key.cer");
KEY = new X509SecurityKey(new X509Certificate2(certificatepath));
}
public IConfiguration Configuration { get; }
public IHostingEnvironment HostingEnvironment { get; }
private string AUTH_LOGINPATH { get; } = Configuration["DefaultAuth:AuthorizationEndpoint"];
private X509SecurityKey KEY { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.IncludeErrorDetails = true;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
// Ensure token expiry
RequireExpirationTime = true,
ValidateLifetime = true,
// Ensure token audience matches site audience value
ValidateAudience = false,
ValidAudience = AUTH_LOGINPATH,
// Ensure token was issued by a trusted authorization server
ValidateIssuer = true,
ValidIssuer = AUTH_LOGINPATH,
// Specify key used by token
RequireSignedTokens = true,
IssuerSigningKey = KEY
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("Mvc", policy =>
{
policy.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
policy.RequireAuthenticatedUser();
});
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}