ASP.NET 4.8 API 身份验证问题 - 401 未经授权错误

问题描述 投票:0回答:1

我正在开发一个旧的 ASP.NET 4.8 Web 表单应用程序,其中包含一个 Web API。 Web 表单应用程序使用 Windows 身份验证,但任何类型的客户端都必须可以访问 API。 我必须仅禁用 API 的身份验证,Windows 身份验证必须保留为 Web 表单应用程序。 该API的客户端大部分来自Linux环境。

web.config就是这样设置的(只粘贴相关数据):

<authentication mode="Windows" />
        <authorization>
            <deny users="?" />
        </authorization>
...
...
        <location path="~">
        <system.web>
            <authorization>
                <allow users="?" />
            </authorization>
        </system.web>
    </location>
    <location path="api">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>

我尝试在

config.SuppressHostPrincipal();
类中添加
WebApiConfig
:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            config.SuppressHostPrincipal();

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "SaraApi",
                routeTemplate: "api/{controller}/{Action}/{id}",
                defaults: new
                {
                    id = RouteParameter.Optional,
                    type = RouteParameter.Optional
                }
            );

            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        }
    }

我还在我的控制器中添加了

[AllowAnonymous]
装饰:

[AllowAnonymous]
public class WebApiController : CustomApiController
{
    // Code...
}

但是我仍然遇到 401 - 未经授权的错误。我发现获得 200 响应的唯一方法是在我的 Windows 控制台测试客户端中设置

UseDefaultCredentials = true
中的
HttpClient
声明:

static HttpClient _client = new(new HttpClientHandler() { UseDefaultCredentials = true })
        {
            BaseAddress = new Uri("http://localhost:24650/")
        };

我想我不能从 Linux 客户端使用这个。因此,我尝试找到一种方法,让每个人都可以访问该 API,而无需进行身份验证。我将在 API 中使用 JWT 来完成此操作。

asp.net-apicontroller asp.net-4.8
1个回答
0
投票

删除 config.SuppressHostPrincipal(): 此设置绕过了整个应用程序的安全性。由于 web.config 处理 API 访问,因此没有必要。

Linux 客户端:

Linux 客户端无法访问默认的 Windows 凭据。您需要在 API 中实现 JWT 身份验证,以允许从 Linux 环境进行访问。客户端将在请求标头中发送 JWT 令牌以进行授权。

© www.soinside.com 2019 - 2024. All rights reserved.