#identityserver4
#identityserver4
Вопрос:
Я перехожу с сервера идентификации 3 на 4. У меня возникли проблемы с запуском Identity Server 4 без HTTPS в локальной среде разработки. С HTTPS — все работает нормально. Без этого пользователь не проходит проверку подлинности и просто перенаправляется на страницу входа. Файл cookie не установлен.
Я знаю, что на сервере идентификации 3 раньше была опция requireSSL, которая теперь исчезла. Я искал документы в течение нескольких часов, но ничего не нашел.
Я использую IdentityServer4 4.1.1 и AspNet Core 3.1. Мой Startup.cs выглядит так:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
.AddInMemoryClients(Clients.Get())
.AddInMemoryIdentityResources(Configs.Resources.GetIdentityResources())
.AddInMemoryApiResources(Configs.Resources.GetApiResources())
.AddInMemoryApiScopes(Configs.Resources.GetApiScopes())
.AddTestUsers(Users.Get())
..AddDeveloperSigningCredential();
services.AddControllersWithViews();
services.AddMvc(options => options.EnableEndpointRouting = false);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseIdentityServer();
app.UseAuthorization();
app.UseEndpoints(endpoints => endpoints.MapControllers());
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
Чего мне не хватает?
Ответ №1:
Я думаю, вы попробуете это в Chrome. Когда вы открываете консоль разработки (F12), скорее всего, вы обнаружите предупреждения о том, что SameSite=None
cookie должен быть защищенным.
Если мое предположение верно, возможны две причины: вы используете customized CookieAuthenticationOptions
, где вы явно задаете options.Cookie.SameSite = SameSiteMode.None
(глядя на ваш запуск, вы этого не делаете), или значение по умолчанию не подходит для вашей конфигурации.
Вы можете настроить его, как показано ниже:
services.AddIdentityServer(options =>
{
options.Authentication.CookieSameSiteMode = SameSiteMode.Lax;
})
Будет работать на localhost, блокирует автоматическое обновление для клиентов, размещенных за пределами корневого домена вашего IdSrv. Поэтому вам нужно выбрать, предпочитаете ли вы Lax для производства или просто для домашней игровой площадки (но в целом ни один из них нигде не рекомендуется).
Комментарии:
1. Вы правы. Я пробую это в Chrome. Попробовал это в MS Edge сейчас, и там это работает. К сожалению, CookieAuthenticationOptions не исправляет это для Chrome.
2. Моя ошибка. Это работает! Должно быть, не перестроил его или что-то в этом роде.. Слишком много настроек сегодня. Большое вам спасибо за вашу помощь. Я вижу, что я должен прочитать обо всем том же самом сайте. 🙂
3. Я предлагаю использовать https локально и избегать изменения одного и того же сайта, это нарушит некоторые случаи OIDC, такие как iframe — вы можете использовать asp.net основные сертификаты разработки локально для https и его очень легко настроить nahidfa.com/posts /…
4. @nahidf, я упомянул об этом в ответе. В любом случае общий подход должен заключаться в том, чтобы по возможности избегать использования None, поскольку в планах Google вообще отказаться от него. Конечно, это должно быть обоснованное решение. На данный момент ни один из них не работает в большинстве ситуаций, но ситуация быстро меняется, и хорошо быть готовым.