忽略默认端口为发行人与身份验证服务器

时间:2019-01-30 18:44:15

标签: c# identityserver4

我将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.

有一种方法忽略端口?

2 个答案:

答案 0 :(得分:1)

可以在客户端关闭发卡行验证,也可以在AddIdentityServer的ids4端配置静态发卡行名称,以便在请求令牌时不再从主机推断出该发卡行。

Identity Server Docs

答案 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;
        }
    }
    ```