#asp.net-core #asp.net-core-mvc #identityserver3 #.net-5 #asp.net5
#asp.net-core #asp.net-core-mvc #identityserver3 #.net-5 #asp.net5
Вопрос:
Я использую IdentityServer3 для аутентификации OpenIdConnect. У меня есть ASP.NET Клиентское приложение Core 2.2, которое использует следующий код в startup.cs для аутентификации, и оно работает нормально.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.LoginPath = "/Home";
options.AccessDeniedPath = "/Account/AccessDenied";
options.Cookie = new CookieBuilder()
{
Name = "MyAuthCookie",
HttpOnly = true,
};
options.SlidingExpiration = true;
})
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.Authority = configuration["Identity:Authority"];
options.ClientId = configuration["Identity:ClientId"];
options.ResponseType = "id_token";
options.CallbackPath = "/Home";
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.SignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Scope.Add(OpenIdConnectScope.Email);
options.Events = new OpenIdConnectEvents()
{
OnTokenValidated = async context =>
{
// removed for brevity purpose
},
OnRedirectToIdentityProvider = async context =>
{
if (context.ProtocolMessage.RequestType == OpenIdConnectRequestType.Authentication)
{
context.ProtocolMessage.AcrValues = "tenant:" context.Request.Host.Value;
}
await Task.FromResult(0);
},
OnRedirectToIdentityProviderForSignOut = async context =>
{
context.ProtocolMessage.IdTokenHint = context.HttpContext.User.FindFirst("id_token").Value;
await Task.FromResult(0);
}
};
});
}
У меня есть новое приложение .NET 5
, которое использует тот же код, что и выше.
Однако в NET 5
приложении я получаю исключение после успешного входа пользователя в систему на сервере IndentityServer и когда сервер идентификации перенаправляет обратно в клиентское приложение.
Что изменилось в .NET 5
?
Другое отличие заключается Home
в настройке маршрута. Не уверен, что это будет иметь какое-либо значение здесь
в .NET core 2.2
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
}
в .NET 5
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
}
Ответ №1:
Нашел его. Я тестировал это локально в VS 2019. Я включил SSL, и это сработало.