Asp.net core 3.1 保护 API 和 Web 应用程序

Posted

技术标签:

【中文标题】Asp.net core 3.1 保护 API 和 Web 应用程序【英文标题】:Asp.net core 3.1 securing API and web app 【发布时间】:2021-06-28 15:20:47 【问题描述】:

我有一个包含 2 个项目的 ASP.net 核心解决方案,我想为这两个项目添加身份验证:

我希望网络应用使用基于 cookie 的身份验证,因为它很容易添加。 但是当我从 ApiAuth 项目调用 API 时,我希望通过身份验证才能使用它。

WebAuth 项目包含基本身份验证(登录、注册...),但我可以在未经身份验证的情况下调用 ApiAuth 项目 Apis。如何保护 ApiAuth 项目 API? 我尝试添加 [Authorize] 装饰器,但出现此错误:

所以我正在考虑添加 JWT 身份验证,但我不知道这样做是否正确? 有什么建议吗?

【问题讨论】:

我们无法猜测您的代码在其中写了什么。您是否按照错误描述的方式添加了身份验证? 【参考方案1】:

如果 API 请求来自使用 cookie 提供服务的 Web 应用,并且如果 Web 和 API 共享相同的域,则您可以为两者使用相同的 cookie。这比 JWT 更可取,因为它还具有使用不受恶意 javascript 影响的安全、仅限 HTTP 的 cookie 的优势。

在 API 上,您将添加 cookie authentication:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie();

来自网络应用的请求应该带有 cookie,只要它们使用相同的域,例如 myapp.com/appmyapp.com/api

这还要求两个应用具有相同的Data Protection 配置,因此它们都能够使用共享密钥读取加密的 cookie。

【讨论】:

以上是关于Asp.net core 3.1 保护 API 和 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.1 中的证书身份验证实现

使用 KeyCloak 保护 ASP.NET Core 3.1 MVC 应用程序

ASP.NET Core 3.1 和 Angular:将 api 调用重定向到登录页面

使用 MSAL 保护 ASP.Net Core Web API 和 Angular App

Wcf 服务在 .NET Core 3.1 控制台应用程序中工作,但在 ASP.NET Core 3.1 Web API 中无法工作

在 ASP.NET Core 3.1 中上传和下载大文件?