问题1:
外网地址配置了https 内部服务身份认证配置使用的内网地址
此时通过不同地址获取到的Token令牌 颁发者Issuer的值不一致,会导致身份校验失败
解决办法:
授权服务配置指定的Issuer
/// <summary>
/// TODO PostConfigureServices - Configure完成后执行
/// </summary>
/// <param name="context"></param>
public override void PostConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
// 配置IssuerUri 为指定颁发者
PostConfigure<IdentityServerOptions>(options =>
{
options.IssuerUri = configuration["AuthServer:IssuerUri"];
});
}
并在appsetting中添加相关项
问题2:
使用Nginx代理
授权服务部署于服务器指定端口 /.well-known/openid-configuration
访问Identity接口获取Oidc配置时,获取到的地址未携带端口
解决办法:
Nginx 转发策略处 将端口带上 :$server_port
proxy_set_header HOST $host:$server_port;
问题3:
使用Nginx代理
授权服务部署于服务器指定端口 /.well-known/openid-configuration
访问Identity接口获取Oidc配置时,获取到的地址由https转为了http
解决办法:
Nginx 转发策略处添加
proxy_set_header X-Forwarded-Proto $scheme;
授权服务AuthServerHostModule OnApplicationInitialization中添加
// 获取nginx等反向代理服务器传来的头参数 X-Forwarded-Proto 以实现自适配
var fordwardedHeaderOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
};
fordwardedHeaderOptions.KnownNetworks.Clear();
fordwardedHeaderOptions.KnownProxies.Clear();
app.UseForwardedHeaders(fordwardedHeaderOptions);
最终Nginx配置内容如下
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header HOST $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://内网ip:内网端口;