asp.net-core - ASP.NET Core React 模板 v3.15:没有 IdentityServer 是否安全?
问题描述
最近,Microsoft 开始在 ASP.NET Core 反应模板(在 Identity Core 之上)中包含 IdentityServer 功能。我试图清楚地理解这种差异的含义。因此,我从模板开始,附在此处:
https://drive.google.com/file/d/1GV4UNhsPp_PdPk2RKjoz0490Vn9A6geY/view?usp=sharing
并做了一些事情:
- 搭建所有身份资产
- 从 startup.cs 中注释掉以下几行:
(在配置服务中)
//services.AddIdentityServer()
// .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services.AddAuthentication();
//.AddIdentityServerJwt();
(在配置中)
//app.UseIdentityServer();
在客户端,我删除了一些代码,并在 FetchData.js 中进行了以下更改:
async populateWeatherData() {
//const token = await authService.getAccessToken();
const response = await fetch('weatherforecast', {
//headers: !token ? {} : { 'Authorization': `Bearer ${token}` },
credentials: 'same-origin',
});
const data = await response.json();
this.setState({ forecasts: data, loading: false });
}
}
我的理解是,在我们登录后,我们将拥有一个包含登录信息的 cookie,并使用凭据:'same-origin' 将其发送到受保护的 API 端点。
这很有效,对我来说似乎很安全。去测试:
- 启动项目 - 导航到 /identity/account/login(由于我删除了其他客户端代码,这不会自动发生) - 为自己创建一个帐户。(您必须在出现提示时应用数据库迁移。)然后使用该帐户登录。
现在,您可以单击“获取数据”,数据将加载。为了确认这实际上是安全的,在上面说的地方
credentials: 'same-origin',
用“省略”替换该值。然后重复这个过程。手动导航到登录页面,然后单击“获取数据”。它会失败。
基于此,我想确认在 ASP.NET Core React 项目模板中,我能够在不利用 IdentityServer 的情况下实现相同的 API 端点安全性。这个对吗?
如果是这样,利用 IdentityServer 的附加值是什么?我的假设是,在这个模板中一切正常,因为我们通过 Web 表单进行身份验证并将令牌存储在 cookie 中,但是 IdentityServer 为我们提供了其他场景的灵活性(我们在这个模板中没有真正利用)。
为了让事情更复杂一点,在这篇比较 ASP.NET Identity Core 和 Identity Server 的帖子中,
.NET Core Identity 与 IdentityServer4
答案是:“ASP.NET Core Identity 是一个会员系统,它不提供任何即用型端点,也不提供令牌管理或对不同授权方式的支持。”
但根据我在这里展示的内容,似乎 ASP.NET Core Identity 确实提供了一种授权机制,我相信令牌管理,因为它返回给我一个令牌,我将存储在 cookie 中并在何时传回我想达到一个终点。
再次总结我的问题:
- 我的修改后的样本在没有 Identity Server 的情况下是否像使用它一样安全?
-如果是,在此模板的上下文中利用 Identity Server 的附加价值是什么?
-如果是的话,两者之间有一些重叠是否准确?
谢谢...
解决方案
推荐阅读
- javascript - 在 UI 中显示不同的字符串
- python - GluonCV 目标检测器 - 批量图像推断
- pentaho - Pentaho Kettle Avro 输入
- java - Java字符串索引让我感到困惑
- sql - cx_Oracle.DatabaseError: ORA-01841: (full) year 必须在 -4713 和 +9999 之间,而不是 0
- java - 字符串中的 NullPointerException
- r - 在 R 中的 shapefile 上绘制空间数据集时,如何绘制空间数据集的坐标?
- python - 如何为自己更改 setter 和 getter 以便能够在 python 中处理类和组合
- java - 错误“未为 User 类型定义带有 DefaultPasswordEncoder() 的方法”Spring Boot 密码
- javascript - 再次使用组件做出反应