У меня проблема с тем, что мой сервер идентификации работает без проблем при входе пользователей в систему на настольных компьютерах. Однако, когда я захожу на веб-страницу мобильного приложения и захожу в систему, у меня возникает постоянная ситуация с перенаправлением.
При первом входе на сервер идентификации я вхожу в систему, а затем при перенаправлении обратно в приложение автоматически перенаправляется обратно на сервер идентификации и обратно и обратно.
Если я остановлю перенаправление (нажав кнопку остановки в браузере), перейдите на мой сайт, на котором я уже вошел в систему.
Я использую IdentityServer3 и Asp.Net Core.
Журналы для сервера идентификации не показывают ошибок и успешных входов. Это происходит, если я вхожу в систему с внешним провайдером или нестандартным провайдером.
Я думал, что это что-то с Safari, но я установил Chrome на свой телефон, и он делает то же самое.
Я провел некоторое исследование и не думаю, что это проблема http / https, и я не могу добавить Session_start, потому что он не существует в ядре.
Может кто-нибудь придумать причину, по которой мобильное приложение не будет работать, пока настольное приложение работает нормально? Любые предложения по любым другим журналам, которые я могу проверить или что я могу попробовать?
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = new PathString("/Login/Login/");
options.AccessDeniedPath = new PathString("/Login/Login/");
})
.AddOpenIdConnect(options =>
{
options.Authority = _authenticationServer;
options.ClientId = "...";
options.ResponseType = "id_token";
options.Scope.Add("openid");
options.Scope.Add("email");
options.Scope.Add("profile");
options.UseTokenLifetime = false;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
ValidateIssuer = false,
};
options.Events = new OpenIdConnectEvents
{
OnTokenValidated = context =>
{
...
return Task.CompletedTask;
}
};
});
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
})
.AddJsonOptions(options =>
options.SerializerSettings.ContractResolver = new DefaultContractResolver());
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton(Configuration);
services.AddMemoryCache();
services.AddSession();
services.AddKendo();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseStaticFiles();
app.UseSession();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
UPDATE:
Я проверил, что это проблема только на iPhone. Андроид работает нормально. Я также подтвердил, что это проблема клиентского приложения .Net Core. Стандартное клиентское приложение .Net работает нормально.
Моя конечная точка авторизации вызывается в бесконечном цикле.
Кто-нибудь успешно настроил основное клиентское приложение .Net на сервере идентификации и работает ли он через браузер iphone? Любая помощь?!?