Identityserver4无法通过IP地址工作

时间:2017-09-07 08:57:36

标签: asp.net-core identityserver4

我已经将IdentityServer4与asp net core Web一起使用,在localhost:50481中调试时一切正常,但是当我在同一台计算机和调试模式下使用myipaddress:50481时,它失败了。我不使用临时凭证,而是创建了RSA证书:

 .AddSigningCredential(Config.GetSigningCertificate()) 

  public static RsaSecurityKey GetSigningCertificate()
  {
     var filename = Path.Combine(Directory.GetCurrentDirectory(), "certificateKey.rsa");

        if (File.Exists(filename))
        {
            var keyFile = File.ReadAllText(filename);
            var tempKey = JsonConvert.DeserializeObject<TemporaryRsaKey>(keyFile, new JsonSerializerSettings() { ContractResolver = new RsaKeyContractResolver() });

            return CreateRsaSecurityKey(tempKey.Parameters, tempKey.KeyId);
        }
        else
        {
            var key = CreateRsaSecurityKey();

            RSAParameters parameters;

            if (key.Rsa != null)
                parameters = key.Rsa.ExportParameters(includePrivateParameters: true);
            else
                parameters = key.Parameters;

            var tempKey = new TemporaryRsaKey
            {
                Parameters = parameters,
                KeyId = key.KeyId
            };

            File.WriteAllText(filename, JsonConvert.SerializeObject(tempKey, new JsonSerializerSettings() { ContractResolver = new RsaKeyContractResolver() }));

            return CreateRsaSecurityKey(tempKey.Parameters, tempKey.KeyId);
        }
  }

我还检查了localhost和ipaddress的jwks,它们是匹配的。

当我将项目发布到本地IIS时,localhost也不起作用,出现500内部错误。

我的应用中的所有网址都是“http://localhost:50481

先谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我不得不说这是一个愚蠢的错误,我没有注意到authConfig,

services.ConfigureApplicationCookie(o =>
        {
            o.Events = new CookieAuthenticationEvents()
            {
                OnRedirectToLogin = (ctx) =>
                {
                    if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
                    {
                        ctx.Response.StatusCode = 401;
                    }

                    return Task.CompletedTask;
                },
                OnRedirectToAccessDenied = (ctx) =>
                {
                    if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
                    {
                        ctx.Response.StatusCode = 403;
                    }

                    return Task.CompletedTask;
                }
            };
        });

当我使用ip地址时,配置切换到prod,将localhost更改为我的ip地址是有意义的。

希望能有其他人。