【问题标题】:Authentication filter in Web API 2Web API 2 中的身份验证过滤器
【发布时间】:2017-03-29 17:42:40
【问题描述】:

我在 Web API 2 中创建了一个简单的自定义身份验证过滤器,如下所示。

public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
    {
        string authToken = context.Request.Headers.GetValues("CustomAuthHeader").FirstOrDefault();
        if (string.IsNullOrEmpty(authToken))
        {
            context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], context.Request); 
        }

        return Task.FromResult(0);
    }

    public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
    {
        return Task.FromResult(0);
    }

我对此有以下问题-

1)。 AuthenticateAsync 用于实现核心身份验证逻辑,但 ChallengeAsync 在现实生活中的用途是什么。如果可能,请举例说明。

2)。为什么它返回任务。每次都会在后端创建一个新线程(无论何时适用)。如果每次都创建一个新线程,这个线程什么时候会被杀死?

3)。 Task.FromResult(0)的作用是什么

谢谢!

【问题讨论】:

    标签: asp.net-web-api


    【解决方案1】:
    1. ChallengeAsync 用于在需要时向响应添加身份验证质询。通常在 401 Unauthorized 的情况下使用它来提供有关服务器所需身份验证的信息。

    2. 方法返回任务以支持异步执行和链接。

    3. 方法不包含真正的异步方法,这就是它们返回虚拟已完成任务以满足实现接口的原因。

    我想this article 应该对你有很大帮助。

    【讨论】: