C# 忽略使用identity server验证颁发者的默认端口

C# 忽略使用identity server验证颁发者的默认端口,c#,identityserver4,C#,Identityserver4,我将IdentityServer4与ASP.NET核心API一起使用,两者都托管在相同的API和IdentityServer4.AccessTokenValidation as和身份验证方案中 到目前为止,它工作得很好,但是我的一个用户使用一个外部工具来请求令牌,并且不能完全控制每个http请求 此工具从https://domain:443/identity-服务器/…但所有其他客户端不包括默认端口 我检查了JWT令牌,它包含了作为颁发者的端口的url 然后请求失败:承载未通过身份验证。失败消息

我将IdentityServer4与ASP.NET核心API一起使用,两者都托管在相同的API和IdentityServer4.AccessTokenValidation as和身份验证方案中

到目前为止,它工作得很好,但是我的一个用户使用一个外部工具来请求令牌,并且不能完全控制每个http请求

此工具从
https://domain:443/identity-服务器/…
但所有其他客户端不包括默认端口

我检查了JWT令牌,它包含了作为颁发者的端口的url

然后请求失败:
承载未通过身份验证。失败消息:IDX10205:颁发者验证失败。


是否有忽略端口的方法?

可以在客户端关闭颁发者验证,也可以在
AddIdentityServer
中在ids4端配置静态颁发者名称,以便在请求令牌时停止从主机推断


可以在客户端关闭发卡机构验证,也可以在
AddIdentityServer
中在ids4端配置静态发卡机构名称,以便在请求令牌时停止从主机推断


我用另一种方式解决了这个问题。我创建了一个从主机清除端口的中间件:

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

我用另一种方式解决了它。我创建了一个从主机清除端口的中间件:

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

您通常可以关闭颁发者验证。如果不是选项,您可能需要实现自定义令牌验证程序。您通常可以关闭颁发者验证。如果不是选项,您可能需要实现自定义令牌验证器。