Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net核心WEB API安全第三方中间件路由?_C#_Asp.net Core_Asp.net Core Webapi - Fatal编程技术网

C# Asp.net核心WEB API安全第三方中间件路由?

C# Asp.net核心WEB API安全第三方中间件路由?,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,寻找关于如何进行此操作的建议: 我有一个asp.net core 2 webapi项目,通过JWT身份验证和用户角色授权进行保护 我在我的asp.net webapi中添加了一个第三方中间件,用于公开度量端点 我可以在metrics中间件中设置端点路由和端口,但没有授权选项 我希望将这些端点的安全保护与我自己的API端点相同,这样只有特定角色才能访问它们,但不确定如何执行此操作,可能是链下游的其他自定义中间件发现这些路由并检查JWT?您的想法正确,下面是一个示例,说明了如何通过端点来确保安全 p

寻找关于如何进行此操作的建议:

我有一个asp.net core 2 webapi项目,通过JWT身份验证和用户角色授权进行保护

我在我的asp.net webapi中添加了一个第三方中间件,用于公开度量端点

我可以在metrics中间件中设置端点路由和端口,但没有授权选项


我希望将这些端点的安全保护与我自己的API端点相同,这样只有特定角色才能访问它们,但不确定如何执行此操作,可能是链下游的其他自定义中间件发现这些路由并检查JWT?

您的想法正确,下面是一个示例,说明了如何通过端点来确保安全

public class MyAuthorizeMiddleware
{
    private readonly RequestDelegate _next;

    public MyAuthorizeMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if (context.Request.Path.StartsWithSegments("/endpoint")
            && !context.User.Identity.IsAuthenticated)
        {
            context.Response.StatusCode = StatusCodes.Status401Unauthorized;
            return;
        }

        await _next.Invoke(context);
    }
}