asp.net-core - 调用 ASP.NET Core 2.1 API 时出现 401。这是CORS问题吗?
问题描述
过去几天我一直在尝试解决 401 错误,但没有成功。
托管在 IIS 后面的 ASP.NET Core 2.1 API。我正在尝试使用 Windows 授权访问 API,但我遇到了登录提示的挑战。如果我不输入用户名和密码,我会收到 401 错误(附截图)。我已经阅读了我能找到的所有文章,并相信我已经正确配置了 CORS。
根据屏幕截图,这看起来像 CORS 问题吗?我正在通过 swagger 进行测试,并且正在从我认为是同一个域的领域中调用。有人对可能出现的问题有任何建议吗?
解决方案
从我在此屏幕截图中看到的情况来看,一切正常。在这种情况下,401 是一个可取的错误,它也证明您对 CORS 没有任何问题,因为 API 以适当的方式响应您的请求。
要突破 Api,您应该关注“响应标头”部分,其中身份验证类型定义为BEARER。
由此我们可以得出结论,身份验证是基于令牌的,并且在实践中的工作方式如下:
通过通过 Windows 身份验证正确登录,WebAPI 在标头中提供一个响应令牌,将您标识为用户。为了访问 API,您应该将此令牌存储在本地,然后通过将其添加到每个请求的标头部分来使用它。
要了解有关 swagger 中基于令牌的身份验证的更多信息,请查看 https://swagger.io/docs/specification/authentication/bearer-authentication/
要了解令牌的工作原理,请查看https://jwt.io/
下面是一个例子,说明如何通过在asp net core应用的启动类中配置swagger来达到预期的目的。
public void ConfigureServices(IServiceCollection services)
{
//other code removed for brevity
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "My App API", Version = "v1" });
c.CustomSchemaIds((type) => type.FullName);
c.DescribeAllEnumsAsStrings();
c.DescribeAllParametersInCamelCase();
c.EnableAnnotations();
c.OperationFilter<FormFileOperationFilter>();
var apiXmlDocFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var apiXmlDocFilePath = Path.Combine(AppContext.BaseDirectory, apiXmlDocFileName);
c.IncludeXmlComments(apiXmlDocFilePath);
c.AddFluentValidationRules();
c.AddSecurityDefinition("Bearer", new ApiKeyScheme() //this is desireable line
{
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
In = "header"
});
c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> { { "Bearer", Enumerable.Empty<string>() } });
});
}
实现此功能后,您将能够直接从 swagger UI 将令牌添加到所有请求。
您还可以使用 Postman https://learning.getpostman.com/docs/postman/sending-api-requests/authorization/实现预期目标
希望能帮助到你。
推荐阅读
- azure - 我能否从 Azure 容器注册表中清除所有存储库,而无需逐个输入所有存储库
- azure - 对 aks 集群的 SSH 访问
- reactjs - 在开玩笑断言测试之前如何等待事件发生?
- postgresql - Postgres 睡眠时间被添加到总查询运行时而不是输出中
- c# - Wpf在图像和mvvm控件之间绘制对角线
- postgresql - 为什么在包装的 PLPGSQL 函数中查询比本身慢得多?
- json - 使用 i18next-conv 时无法将 .po 文件转换为 .json 文件
- javascript - 如果打开新选项卡,JSZIP 执行将停止
- json - Flutter 需要帮助解析 ListView 中的数据
- python - 无法解释的速度性能下降。方法实例化相关?