我有运行在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;
- 已将.pfx文件复制到服务器1和2中,并安装了相同的文件
5.现在我从服务器2生成access_token并将该令牌传递给web API(运行在服务器1上(;权威;指向在服务器1上运行的IdentityServer。
但这不起作用,我得到了"未经授权的";错误
这清楚地表明我在这里做错了什么。
请引导我,提前感谢
访问令牌请求:在此处输入图像描述
令牌响应:在此处输入图像描述
来自2台服务器的令牌比较:在此处输入图像描述
如果您有多个身份服务器,那么它们必须共享同一个签名密钥。
请参阅有关关键材料的页面。
如果您使用AddDeveloperSigningCredential,那么每台机器都将有一组不同的私钥/公钥。
HTTPS证书与令牌签名证书不同。如果这不是问题所在,则可能是客户端接收令牌时受众与预期受众不匹配。请检查ValidateAudice参数。为了简单起见,令牌中的受众(aud-claim(应该与两个Identity Server中的受众相同。
如果来自身份验证类的对您没有帮助,那么您可以始终禁用该类中的所有令牌验证功能,然后逐个启用它们,以找出导致问题的原因。
如果也可能是颁发者问题,因为这两个令牌有不同的问题,那么客户端可能希望令牌中有一个特定的颁发者。也许您应该在两个IdentityServer前面放置一个负载均衡器,以便它们具有相同的颁发者?