我将IdentityServer4与ASP.NET Core API一起使用,两者都托管在相同的API和IdentityServer4.AccessTokenValidation中,并带有身份验证方案。
到目前为止效果很好,但是我的用户使用外部工具来请求令牌,并且无法完全控制每个http请求。
此工具请求从令牌https://domain:443/identity-server/...
,但所有其它的客户端不包括默认端口。
我检查了JWT令牌,并将其包括与端口作为发行者的URL。
请求失败,然后显示:Bearer was not authenticated. Failure message: IDX10205: Issuer validation failed.
有一种方法忽略端口?
答案 0 :(得分:1)
可以在客户端关闭发卡行验证,也可以在AddIdentityServer
的ids4端配置静态发卡行名称,以便在请求令牌时不再从主机推断出该发卡行。
答案 1 :(得分:0)
我用另一种方式解决了它。我创建了一个中间件,可以从主机清除端口:
public class CleanupHostMiddleware
{
private readonly RequestDelegate next;
public CleanupHostMiddleware(RequestDelegate next)
{
this.next = next;
}
public Task Invoke(HttpContext context)
{
var request = context.Request;
if (request.Host.HasValue && (HasHttpsPort(request) || HasHttpPort(request)))
{
request.Host = new HostString(request.Host.Host);
}
return next(context);
}
private static bool HasHttpPort(HttpRequest request)
{
return request.Scheme == "http" && request.Host.Port == 80;
}
private static bool HasHttpsPort(HttpRequest request)
{
return request.Scheme == "https" && request.Host.Port == 443;
}
}
```