IdentityServer4 配置负载均衡

  如果使用 IdentityServer4 做授权服务的负载均衡,默认情况下是不可以的,比如有两个授权服务站点,一个资源服务绑定其中一个授权服务(Authority配置),如果通过另外一个授权服务获取access_token,然后拿这个access_token去访问资源服务,会报 401 未授权错误。
因为生成access_token受以下影响的因素:

  scope(授权范围):服务包含在 scope 内,生成的access_token,才能访问本服务。
  lifetime(生命周期):过期的access_token,无效访问。
  client ID (client_id):不同的客户端 ID,生成不同对应的access_token。
  issuer name (iss):翻译过来“发行者名称”,类似于主机名。
  RSA 加密证书(补充):不同的加密证书,生成不同对应的access_token。

要让负载均衡下的两个授权服务,可以正常使用的话,需要确保两台授权服务以上五种因素完全一致,除了 issuer name (iss),其他因素都是一样的。

手动设置IssuerUri代码:

var builder = services.AddIdentityServer(x => x.IssuerUri = "http://111.12.2.21:8000"); //slb 地址

资源服务授权配置修改:

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
    Authority = "http://111.12.2.21:8000", //slb 地址
    ApiName = "trade_refund",
    RequireHttpsMetadata = false
});

  注意slb地址是负载均衡的地址,而不是单机服务器的地址。

 

官方文档:

  设置 IssuerUri(发行人)将出现在发现文档和发布的 JWT 令牌中的名称。建议不要设置此属性,它会根据客户端使用的主机名推断颁发者名称。但做负载还是加上负载地址uri

 

网上说IssuerUri 这个东西随便指定都可以。

  

 参考文档 

posted on 2022-12-26 16:01  花阴偷移  阅读(23)  评论(0编辑  收藏  举报

导航