Наше приложение выглядит следующим образом:
- Identity.Web (localhost: 5555) -. Net Core 3.1: в нем есть бритвенные страницы для сброса логина и пароля. Мы используем Identity Server 4 (Поток кода - Oauth 2.0, OpenId).
- Web.Api (localhost: 4500). Net Core 3.1: в основном имеет API ресурсов
- Angular 8 (localhost: 4200): использование клиента open-id для аутентификации и доступа к API ресурсов.
Наше приложение работало идеально до Chrome SameSite Updates, Теперь, когда мы вводим имя пользователя и пароль для входа (Identity.Web - localhost: 5555), браузер перенаправляет на (Angular 8 - localhost: 4200), а затем обратно обратно на страницу входа.
Прежде, раньше был обратный вызов авторизации, затем войдите в панель управления.
Ниже вы найдете нашу конфигурацию:
Identity.Web (config.cs)
var redirectUris = new List<string> { frontendUrl + "/auth-callback", frontendUrl + "/silent-refresh.html" };
var allowedCorsOrigins = new List<string> { frontendUrl };
var postLogoutRedirectUris = new List<string> { frontendUrl + "/signout-callback-oidc" };
return new List<Client>
{
new Client
{
RequireConsent = false,
ClientId = "angular_spa",
ClientName = "Angular 4 Client",
AllowedGrantTypes = GrantTypes.Code,
RequirePkce = true,
RequireClientSecret = false,
AllowedScopes = new List<string> {"openid", "profile", "api1"},
RedirectUris = redirectUris,
PostLogoutRedirectUris = postLogoutRedirectUris,
AllowedCorsOrigins = allowedCorsOrigins,
AllowAccessTokensViaBrowser = true,
}
};
Identity.Web (Startup.cs)
var settings = Configuration.GetSection(nameof(MongoDbSettings)).Get<MongoDbSettings>();
var mongoDbContext = new MongoDbContext(settings.ConnectionString, settings.DatabaseName);
services.AddIdentity<ApplicationUser, MongoIdentityRole>()
.AddMongoDbStores<ApplicationUser, MongoIdentityRole, Guid>(mongoDbContext)
.AddDefaultTokenProviders();
services.Configure<MongoSettings>(options =>
{
options.ConnectionString = Configuration.GetSection("MongoDbSettings:ConnectionString").Value;
options.DatabaseName = Configuration.GetSection("MongoDbSettings:DatabaseName").Value;
});
services.AddIdentityServer(options => { options.Events.RaiseSuccessEvents = true; })
.AddDeveloperSigningCredential()
.AddAspNetIdentity<ApplicationUser>()
.AddProfileService<ProfileService>()
.AddMongoRepository()
.AddClients()
.AddIdentityApiResources();
Web.Api (Startup.cs)
services.AddAuthentication()
.AddIdentityServerAuthentication("api1", options =>
{
options.Authority = Configuration.GetSection("IdentityServer:BaseUrl").Value;
options.RequireHttpsMetadata = false;
options.ApiName = "api1";
options.TokenRetriever = (request) =>
{
string token = TokenRetrieval.FromAuthorizationHeader().Invoke(request);
if (string.IsNullOrEmpty(token))
{
token = TokenRetrieval.FromQueryString().Invoke(request);
}
return token;
};
});
Примечание: Все отлично работает в Firefox. Мы прочитали эту статью и применили то, что есть, но это не сработало.