我有一个都使用AspNetIdentity的IS4服务器,Web服务器和api服务器。在本地,他们都相处得很好,我可以登录到Web UI,将我重定向到IS4,在其中输入凭据,然后将我重定向到成功登录的Web UI。这很好,但仅在本地计算机上有效3个实例正在运行localhost:differentports。
在我的生产环境中,它们显然不是全部都在本地主机上,而是3个不同的域。该API以我想要的方式工作,但Web无法正确登录IS4。我尝试登录,它将我重定向到IS4,在那里我可以登录。但是当我被引导回到Web UI时,我没有登录。如果我直接进入IS4服务器,我将在那里登录。如果我尝试进入UI中的[Authorize]
页面,则会陷入调用IS4登录的无穷循环,然后IS4表示它已经登录,因此返回页面并继续循环。>
我知道这很罗word,但是本地数据库上的配置与我的产品中的配置相同,只是没有重定向uris。
这是我的IS4的启动
services.RegisterDataProtectionServices(Configuration);
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<IdentityContext>()
.AddDefaultTokenProviders();
services.AddMvc();
services.Configure<IISOptions>(iis =>
{
iis.AuthenticationDisplayName = "Windows";
iis.AutomaticAuthentication = false;
});
services.AddIdentityServer()
.AddAspNetIdentity<ApplicationUser>()
.AddConfigurationStore(configDb =>
{
configDb.ConfigureDbContext = db => db.UseNpgsql(Configuration.GetConnectionString("IdentityServer4ConfigurationContext"),
sql => sql.MigrationsAssembly(typeof(IdentityServer4Startup).GetTypeInfo().Assembly.GetName().Name));
})
.AddOperationalStore(operationDb =>
{
operationDb.ConfigureDbContext = db => db.UseNpgsql(Configuration.GetConnectionString("IdentityServer4PersistedGrantContext"),
sql => sql.MigrationsAssembly(typeof(IdentityServer4Startup).GetTypeInfo().Assembly.GetName().Name));
})
.AddDeveloperSigningCredential();
这是Web的启动
services.RegisterDataProtectionServices(Configuration);
services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddMvc(options =>
{
options.Filters.Add<WebAccessLogFilter>();
//source: https://stackoverflow.com/a/47728690/2874556 --> RequestController --> Self-reference when pulling RequestInstrument list
options.OutputFormatters.Clear();
options.OutputFormatters.Add(new JsonOutputFormatter(new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
}, ArrayPool<char>.Shared));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<IdentityContext>()
.AddDefaultTokenProviders();
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = _hostingConfiguration.IdentityServer4AuthorityUrl;
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("api1");
options.Scope.Add("offline_access");
options.Scope.Add("openid");
options.Scope.Add("email");
options.Scope.Add("profile");
});
services.RegisterAutoMapper();
任何帮助将不胜感激,因为我将完全从我的Web项目中删除IS4。