У меня было много проблем в разных примерах, реализующих функцию единого входа или аналогичную функцию с сервером идентификации. Учитывая конфигурацию IDServ Startup.cs
var builder = services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApis())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetUsers());
и двух клиентов:
services.AddMvc();
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.SaveTokens = true;
});
+
services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters();
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.Audience = "api1";
});
Я всегда сталкиваюсь с какой-то проблемой, получаявторой клиент для перенаправления на сервер аутентификации, когда запрос еще не пришел с действительным токеном. Я привел приведенное выше в качестве примеров, но, похоже, все еще остается вопрос о том, имеет ли client2 AddCookie
в качестве первого, или один или оба используют AddJwtBearer
и т. Д. После нескольких дней смешивания различных комбинацийconfig Я чувствую необходимость спросить, какие важные части конфигурации приводят к тому, что клиент перенаправляет на страницу аутентификации / входа в IdentityServer, и как добиться того, чтобы несколько клиентов играли хорошо, разделяя Auth между собой.
Iмы нашли канонические примеры IdentityServer (https://github.com/IdentityServer/IdentityServer4/tree/aspnetcore2/samples/Quickstarts/), но они не дают хорошего освещения этого: как в приведенном выше примере (я взял фрагменты из QS # 3, только первый клиент перенаправляет, исекунда будет просто 401, если у нее еще нет действительного токена на предъявителя.