带有 Web API 的 .NET 4.8 上的 ASP.NET Web 表单:身份验证问题 - 401 未经授权的错误

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

我在 .NET 4.8 上开发旧版 ASP.NET 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>
</authentication>

我尝试在

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-web-api webforms 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.