Identity Server 4无法验证来自localhost的受保护API

时间:2018-04-05 02:16:03

标签: identityserver4

方案

  • localhost& 192.168.0.10指的是名为MyPC的同一台机器
  • 身份服务器正在" MyPC"
  • 上运行
  • UI使用" localhost"与Identity Server进行通信
  • 受保护的API使用" 192.168.0.10"与Identity Server进行通信
  • UI& API相互通信并由Identity Server进行身份验证

在上面的场景中,如果我使用Identity Server 3,一切都很好;但是当我切换到Identity Server 4(最新版本)时问题就出现了。我在API中遇到了这个错误

  

System.IdentityModel.Tokens.SecurityTokenInvalidIssuerException:IDX10205:颁发者验证失败。发行人:' localhost:9987' ......

如果我对UI和&amp ;;使用相同的IP地址(localhost或192.168.0.10),那么该错误就会消失用于与Identity Server通信的API。

有人能指出我解决这个问题的方向吗?我确实需要能够使用127.0.0.1,localhost,Lan地址,Wan地址访问Identity Server吗?

这是我在API Startup中使用的代码:

services.AddAuthentication(o =>
            {
                o.DefaultScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
                o.DefaultAuthenticateScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
            })
            .AddIdentityServerAuthentication(x =>
            {
                x.Authority = Configuration.GetSection("URL").GetSection("IdentityServerURL").Value;
                x.ApiSecret = Configuration.GetSection("Resource").GetSection("APISecrets").Value;
                x.ApiName = Configuration.GetSection("Resource").GetSection("APIName").Value;
                x.SupportedTokens = SupportedTokens.Both;
                x.RequireHttpsMetadata = false;
            });
P / S:我对此进行了研究,但对此没有任何明确的答案。

1 个答案:

答案 0 :(得分:0)

IdentityServer4服务器将包含一个" Issuer"在JWT令牌中。您可以仔细检查,例如使用jwt.io那是什么。来自the relevant docs

  

设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称。建议不要设置此属性,该属性从客户端使用的主机名中推断出发行者名称。

如果你做自定义命名,别名,端口,子域和诸如此类的东西,那么你可以继续手动设置它(无论是在服务器端还是在验证端),或者设置发行者验证(也许仅在dev)。