我在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;
5。现在,我从服务器2生成access_token并将此令牌传递到Web API(在服务器1上运行)和指向服务器1上运行的IdentityServer的“ Authority”。
但这无法正常工作,并且出现“未经授权”错误。
它清楚地表明这里有些错误。
请指导我,在此先谢谢
访问令牌请求:enter image description here
令牌响应:enter image description here
来自2个服务器的令牌比较:enter image description here
答案 0 :(得分:0)
如果您有多个身份服务器,则它们必须共享相同的签名密钥。
请参阅page有关密钥材料。
如果使用AddDeveloperSigningCredential,则每台计算机将具有一组不同的私钥/公钥。
HTTPS证书与令牌签名证书不同。如果这不是问题,则可能是客户端收到令牌时观众与预期的观众不匹配。请检查ValidateAudience参数。为简单起见,两个IdentityServer中令牌的受众(声音声明)应该相同。
如果来自身份验证类的不能帮助您,那么您始终可以禁用此class中的所有令牌验证功能,然后逐个启用它们以找出导致您麻烦的原因。
如果这也可能是发行者问题,因为两个令牌具有不同的问题,则客户可能希望令牌中有特定的发行者。也许您应该在两个IdentityServer前面放置一个负载均衡器,以便它们具有相同的颁发者?