一台服务器到另一台服务器的IdentityServer AccessToken

时间:2020-08-06 12:33:31

标签: .net asp.net-core asp.net-identity identityserver4

我在Windows服务器“服务器1”上运行的Web API和IdentityServer4应用程序上,并且我们使用“ access_token”来授权API调用。 现在,客户端希望将IdentityServer4应用程序部署在另一个Windows服务器“服务器2”中。我按照以下步骤进行操作。

1。使用openssll创建证书。

2。使用密码将证书转换为.pfx。

3。添加了以下代码以从Windows应用商店加载证书

X509Certificate2 cert = null;
            using (X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine))
            {
                certStore.Open(OpenFlags.ReadOnly);
                X509Certificate2Collection certCollection = certStore.Certificates.Find(
                    X509FindType.FindByThumbprint,
                    // for dev only
                    "57041fcc9086da18419999fbb9276bd59bd8d14a",false);

                    cert = certCollection[0];
            }          
            return cert;
  1. 将.pfx文件复制到服务器1和2中,并进行安装。

5。现在,我从服务器2生成access_token并将此令牌传递到Web API(在服务器1上运行)和指向服务器1上运行的IdentityServer的“ Authority”。

但这无法正常工作,并且出现“未经授权”错误。

它清楚地表明这里有些错误。

请指导我,在此先谢谢

访问令牌请求:enter image description here

令牌响应:enter image description here

来自2个服务器的令牌比较:enter image description here

1 个答案:

答案 0 :(得分:0)

如果您有多个身份服务器,则它们必须共享相同的签名密钥。

请参阅page有关密钥材料。

如果使用AddDeveloperSigningCredential,则每台计算机将具有一组不同的私钥/公钥。

HTTPS证书与令牌签名证书不同。如果这不是问题,则可能是客户端收到令牌时观众与预期的观众不匹配。请检查ValidateAudience参数。为简单起见,两个IdentityServer中令牌的受众(声音声明)应该相同。

如果来自身份验证类的不能帮助您,那么您始终可以禁用此class中的所有令牌验证功能,然后逐个启用它们以找出导致您麻烦的原因。

如果这也可能是发行者问题,因为两个令牌具有不同的问题,则客户可能希望令牌中有特定的发行者。也许您应该在两个IdentityServer前面放置一个负载均衡器,以便它们具有相同的颁发者?