- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
设置
我们正在构建一个 PWA(渐进式网络应用程序)。主要组件是应用程序 shell (SPA) 和 API。 REST API 将提供应用程序所需的数据,而 SPA 将处理其余的 ( as per Google recommendation )。
问题
最终用户的身份验证似乎有问题,因为需要考虑 Web 浏览器。我们希望用户登录通过关闭浏览器来保持。
我们已经对可能的实现方式进行了研究,但是我们希望确保我们不会走错方向。
我们考虑过的解决方案
基于 session 的身份验证 - 用户将用户名和密码发送到/accounts/auth 并接收带有 session ID 的仅 HTTP cookie。 session 需要存储在数据库或 Redis 中。此选项的问题在于 cookie 是由浏览器自动发送的,因此我们需要适当的 CSRF 保护。使用 同步器 token 模式 每次发出状态更改请求时都会生成一个新 token ,例如邮政。这意味着应用程序需要为每个请求提供一个 CSRF token ,以便 PWA 可以通过 AJAX 发送它。我们确定这并不理想,因为用户可以发送 快速连续发布多个帖子请求 使其中一些失败并导致糟糕的用户体验。
我们也可以在没有 CSRF 的情况下使用这种方法,方法是将 CORS 策略限制在同一域并添加一个从技术上讲应该停止所有 CSRF 的 header 要求,但是我们不确定它的安全性。
基于 JWT token 的身份验证 - 用户将用户名和密码发送到/accounts/auth 并发出新的 JWT token 。然后需要将 JWT 存储在 中本地存储或 cookies .使用localstorage意味着JWT是 XSS 易受攻击 如果 token 被盗,攻击者可以完全冒充用户。使用 cookie 我们仍然会有 CSRF 问题 解决。我们考虑了 双重提交 cookie 方法,但 CSRF 只会在每次重新发布 JWT 时刷新,这会为攻击者创建一个窗口来找出 CSRF 是什么。目前尚不清楚哪种方法最好使用。
基于 session 的身份验证 + JWT token 身份验证 - 用户将用户名和密码发送到/accounts/auth,创建 session ,在浏览器中设置仅 HTTP cookie 并将 JWT token 发送回用户。 PWA 可以使用 JWT 对请求进行身份验证,并且每当 JWT 到期时,应用程序都会再次调用/accounts/auth 以获取新的请求。/accounts/auth 端点仍然需要受 CSRF 保护,但是它对可用性的影响将被最小化。
似乎有大量文章声称本地存储不安全,不应使用,为什么像亚马逊这样的知名组织仍然推荐它? https://github.com/aws/amazon-cognito-auth-js - 此 SDK 使用 本地存储来存储 token 。
最佳答案
每次客户端发出请求时,您都不需要生成新的 CSRF token 。使用像 token = hash(id + secret + current_day)
这样的方案要容易得多。 .您只需要每天更新一次,甚至可以采用混合方案(如果 token 今天无效,但前一天还可以,则服务器接受该操作并在预定义的 header 中返回新 token 供客户端更新) .您也可以使用 cookie 作为 id,使 token 完全无状态且更容易检查,无需将它们存储在数据库中。
关于authentication - PWA 的 API 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60001390/
我正在使用SQL Server 2008 R2,并且想创建一个触发器。 对于每个添加(仅添加),将像这样更新一列: ABC-CurrentYear-AutoIncrementCode 例子: ABC-
是否可以在显示最终一致性的数据存储中创建/存储用户帐户? 似乎不可能在没有一堆架构复杂性的情况下管理帐户创建,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况? 最终一致性存储的用户
您好, 我有一个带有 Identity 的 .NetCore MVC APP并使用 this指导我能够创建自定义用户验证器。 public class UserDomainValidator : IU
这与以下问题相同:HiLo or identity? 我们以本站的数据库为例。 假设该站点具有以下表格: 帖子。 投票。 注释。 使用它的最佳策略是什么: 身份 - 这是更常见的。 或者 HiLo -
我想将 Blazor Server 与 ASP.NET Identity 一起使用。但我需要使用 PostgreSQL 作为用户/角色存储,因为它在 AWS 中。 它不使用 EF,这是我需要的。 我创
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我使用 ASP.NET 身份和 ClaimsIdentity 来验证我的用户。当用户通过身份验证时,属性 User.Identity 包含一个 ClaimsIdentity 实例。 但是,在登录请求期
所以我在两台机器上都安装了 CYGWIN。 如果我这样做,它会起作用: ssh -i desktop_rsa root@remoteserver 这需要我输入密码 ssh root@remoteser
我尝试在 mac osx 上的终端中通过 telnet 连接到 TOR 并请求新身份,但它不起作用,我总是收到此错误消息: Trying 127.0.0.1... telnet: connect to
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将发送有关已注册 URL 的更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。 Facebook和 G
在 Haskell 中,有没有办法测试两个 IORef 是否相同?我正在寻找这样的东西: IORef a -> IORef a -> IO Bool 例如,如果您想可视化由 IORef 组成的图形,这
我是 .NET、MVC 和身份框架的新手。我注意到身份框架允许通过注释保护单个 Controller 操作。 [Authorize] public ActionResult Edit(int? Id)
我有一列具有身份的列,其计数为19546542,我想在删除所有数据后将其重置。我需要类似ms sql中的'dbcc checkident'这样的内容,但在Oracle中 最佳答案 在Oracle 12
这是我用来创建 session 以发送电子邮件的代码: props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enabl
我想了解 [AllowAnonymous] 标签的工作原理。 我有以下方法 [HttpGet] public ActionResult Add() { return View(); } 当我没
在使用沙盒测试环境时,PayPal 身份 token 对某些人显示而不对其他人显示的原因是否有任何原因。 我在英国使用 API,终生无法生成或找到 token 。 我已经遵循协议(protocol)并
我对非常简单的事情有一些疑问:IDENTITY。我尝试在 phpMyAdmin 中创建表: CREATE TABLE IF NOT EXISTS typEventu ( typEventu
习语 #1 和 #5 是 FinnAPL Idiom Library两者具有相同的名称:“Progressive index of (without replacement)”: ((⍴X)⍴⍋⍋X⍳
当我第一次在 TFS 中设置时,我的公司拼错了我的用户名。此后他们将其更改为正确的拼写,但该更改显然未反射(reflect)在 TFS 中。当我尝试 checkin 更改时,出现此错误: 有没有一种方
我是一名优秀的程序员,十分优秀!