c# - Asp.net core 3.1 保护 API 和 Web 应用程序
问题描述
我有一个包含 2 个项目的 ASP.net 核心解决方案,我想为这两个项目添加身份验证:
- 我希望 Web 应用程序使用基于 cookie 的身份验证,因为它很容易添加。
- 但是,当我从 ApiAuth 项目调用 API 时,我希望通过身份验证才能使用它。
WebAuth 项目包含基本身份验证(登录、注册...),但我可以在未经身份验证的情况下调用 ApiAuth 项目 APIs。如何保护 ApiAuth 项目 API?我尝试添加 [Authorize] 装饰器,但出现此错误:
所以我正在考虑添加 JWT 身份验证,但我不知道这样做是否正确?请问有什么建议吗?
解决方案
如果 API 请求来自使用 cookie 提供服务的 Web 应用程序,并且如果 Web 和 API 共享相同的域,则可以为两者使用相同的 cookie。这比 JWT 更可取,因为它还具有使用不受恶意 JavaScript 影响的安全、仅限 HTTP 的 cookie 的优势。
在 API 上,您将添加cookie 身份验证:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
来自 Web 应用程序的请求应该带有 cookie,只要它们使用相同的域,例如myapp.com/app
和myapp.com/api
.
这还要求两个应用程序具有相同的数据保护配置,因此它们都能够使用共享密钥读取加密的 cookie。
推荐阅读
- react-native - react-native redux,这里怎么输出json内容?
- cmd - Windows 10 将自定义字体添加到命令行
- php - Codeigniter 总是重定向到同一个方法
- c++ - 无法创建简单的 DLL 示例
- git - 从 git 中删除文件夹,但已推送时出现致命的外部存储库错误
- android - 使用相同架构的其他设备上的 OAT 文件是否相同?
- python - 如何让 if 语句接受三个参数中的任何一个而不在 Python 中全部为真
- c - 为什么在删除节点时出现分段错误?
- google-cloud-platform - 谷歌云源构建触发器
- vba - 按钮循环多次重复相同的按钮,并且 .delete 失败