IdentityServer访问令牌从一台服务器到另一台服务器



我有运行在windows服务器上的API和IdentityServer4应用程序;服务器1";并且我们使用";access_token";以授权API调用。现在客户端想要在另一个windows服务器"中部署IdentityServer4应用程序;服务器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。

但这不起作用,我得到了"未经授权的";错误

这清楚地表明我在这里做错了什么。

请引导我,提前感谢

访问令牌请求:在此处输入图像描述

令牌响应:在此处输入图像描述

来自2台服务器的令牌比较:在此处输入图像描述

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

请参阅有关关键材料的页面。

如果您使用AddDeveloperSigningCredential,那么每台机器都将有一组不同的私钥/公钥。

HTTPS证书与令牌签名证书不同。如果这不是问题所在,则可能是客户端接收令牌时受众与预期受众不匹配。请检查ValidateAudice参数。为了简单起见,令牌中的受众(aud-claim(应该与两个Identity Server中的受众相同。

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

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

相关内容

最新更新