将基于令牌的身份验证与 Windows 身份验证相结合

Combining token based authentication with Windows Authentication

我们目前有一个使用 Windows 身份验证的内部 API。我负责研究制作这个 API public,其中一个要求是应该可以在没有域用户的情况下登录。域用户应该仍然可以登录,并且应该被视为超级管理员(访问所有内容)。

很明显,不久之后,我们将需要基于角色或声明的授权。作为原型,我实现了一个使用 ASP.NET Identity 的系统。使用 JWT 令牌和基于声明的授权。

但是如何确保通过 Windows 身份验证的用户可以跳过令牌步骤并直接使用 API?

找到一个解决方案,我将自定义 AuthorizationFilterAttributes 添加到我的端点。在属性中,我检查 Principal 类型:

    public override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
    {
        if (actionContext.RequestContext.Principal is WindowsPrincipal)
        {
            return Task.FromResult<object>(null);
        }
        //Custom logic here
        [...]
    }