Identity Server 4在本地无法正常工作

时间:2018-12-12 13:27:46

标签: c# amazon-web-services asp.net-core-2.0 identityserver4

我有一个都使用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。

0 个答案:

没有答案