使用令牌保护 REST Web 服务 (Java)

2023-12-14

这个问题在某种程度上与下面链接的问题相关。但是,我需要更清楚地了解某些方面和一些附加信息。参考:REST Web 服务身份验证令牌实施

背景:

  • 我需要使用令牌实现 REST Web 服务的安全性
  • Web 服务旨在与 Java 客户端一起使用。因此,形成 身份验证和凭据弹出窗口没有用。
  • 我是 REST 安全和加密新手

这是我到目前为止所理解的:

对于第一个请求:

  1. 用户建立 https 连接(或容器确保 https 使用 第301章)
  2. 用户 POST 用户名和密码以登录服务
  3. If credentials are valid we:
    • 生成随机临时令牌
    • 将随机令牌存储在服务器上,将其映射到实际用户名
    • 使用只有服务器知道的对称密钥来加密令牌
    • 对加密令牌进行哈希处理
    • 将加密的令牌和哈希值发送给客户端

对于后续请求:

  1. 客户端发送此加密令牌和哈希组合(使用 基本的用户名字段?)
  2. 我们使用散列确保加密令牌不被篡改 然后解密它
  3. 我们检查会话跟踪表中解密的令牌是否有 未过期条目并获取实际用户名(过期要管理 通过代码?)
  4. 如果找到用户名,则根据允许的角色、允许的操作 已配置

更多细节:

  1. 由于客户端是java客户端,第一个请求可以是POST 包含凭证。然而,这看起来可能会暴露 https 建立之前的凭据。因此应该 对安全资源有一个虚拟 GET,以便 https 是 首先成立?
  2. 假设上面是必需的,第二个请求是 LoginAction POST 与凭据。此请求是手动处理的(不使用 容器的授权)。这是正确的吗?
  3. 上面的LoginAction返回用户加密后的组合 令牌+哈希
  4. 用户将其设置为 BASIC 身份验证使用的标头 机制(字段用户名)
  5. 我们实现一个 JAASRealm 来解密和验证令牌,并发现 允许的角色
  6. 授权过程的其余部分由容器负责 与 web.xml 中定义的 WebResourceCollection

这是正确的方法吗?


为什么不将其简化为以下内容?

对于第一个请求:

  1. 用户与服务器建立 HTTPS 连接(服务不监听任何 其他端口)并将凭据发布到登录服务。
  2. 服务器回复HSTS 标头确保所有进一步的沟通 是 HTTPS。
  3. If credentials are valid we:
    • 生成一个随机临时令牌,该令牌是使用CSPRNG。使其足够长以确保安全(128 位)。
    • 将随机令牌存储在服务器上,将其映射到实际用户名。
    • 将随机令牌发送给客户端

对于后续请求:

  1. 客户端通过 HTTPS 在自定义 HTTP 标头中发送令牌。
  2. 令牌位于数据库中并映射到用户名。如果发现访问权限,则根据允许的角色和允许的操作进行配置。
  3. 如果未找到,则用户被视为未经身份验证,并且必须再次通过登录服务进行身份验证才能获取新令牌。

在服务器端,令牌将被存储并带有到期日期。每次访问该服务时,该日期都会更新以创建滑动到期时间。将有一个作业每隔几分钟运行一次以删除过期的令牌,并且检查令牌是否有效会话的查询将仅检查那些尚未被视为已过期的令牌(以防止计划作业因任何原因失败时出现永久会话) )。

不需要哈希and加密数据库中的令牌 - 除了一点点之外,它没有增加任何实际价值通过默默无闻实现安全。不过你可以直接散列。这将防止设法获取会话数据表的攻击者劫持现有用户会话。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用令牌保护 REST Web 服务 (Java) 的相关文章

随机推荐

  • 在批处理作业中创建文件名作为时间戳

    我们有一个每天运行的批处理作业 并将文件复制到拾取文件夹 我还想获取该文件的副本并将其放入具有文件名的存档文件夹中 yyyy MM dd log 在 Windows 批处理作业中执行此操作的最简单方法是什么 我基本上是在寻找与此 Unix
  • 检测 HTML5 Video 元素是否正在播放 [重复]

    这个问题在这里已经有答案了 我浏览了几个问题来了解 HTML5 元素是否正在播放 但找不到答案 我查看了 W3 文档 它有一个名为 playing 的事件 但我似乎无法让它工作 这是我当前的代码 var stream document ge
  • Mockito 通过,但代码覆盖率仍然较低

    package com fitaxis test import java sql SQLException import org junit Assert import org junit Test import org mockito M
  • 在 Vue 项目中创建和操作 SVG

    我是 Vue js 新手 需要创建一个 Vue 组件来创建和操作 SVG 根据我的理解 在 Vue 组件中使用 JQuery 并不是最好的选择 不过我愿意 因为选择元素非常简单 这是我的 Vue 组件 但我不确定如何使其发挥作用 注意 SV
  • 如何通过jquery将点击更改为鼠标悬停或悬停?

    我想在鼠标悬停或悬停时显示日期 现在是 onclick 我已经使用工具提示来显示数据 但我想在鼠标悬停时显示数据 我尝试了很多但没有成功 任何机构都可以提供帮助 我们将不胜感激 提前致谢 这是我的代码 它想在单击鼠标悬停 悬停时进行更改
  • 按修改日期排序该数组?

    我有一个 php 文件 它在我的用户目录中创建一个包含所有内容的数组 然后该数组被发送回 iPhone 我的 php 创建的数组按字母顺序排序 我希望它按文件创建日期排序 这是我的 php 文件的样子 我该怎么做 谢谢 Using usor
  • 将泛型集合 List<> 绑定到属性网格

    我尝试绑定通用集合列表联系方式 to propGrid但输出与我的预期不符 我想列表联系方式显示为ListBox in propGrid 我该怎么做 谢谢 class Contact public string Name get set p
  • 如何获取执行查询的表名? (蟒蛇/sqlite)

    我正在运行一个简单的查询并将结果转换为 json 我想动态地执行此操作 以便我可以使用一个函数来处理所有查询 query INSERT INTO Tests name start end VALUES params name start e
  • 如何使用项目的哈希值检查 HashSet 是否包含该项目?

    我想检查 HashSet 是否包含特定元素 我已经有了int元素的哈希码 但不是对元素本身的引用 是否可以在不迭代整个集合的情况下做到这一点 没有为什么 哈希码与对象之间没有一对一的映射 鸽子原理 Net HashSet Dictionar
  • 嵌套并行和折叠 for 循环之间有区别吗?

    我知道启用嵌套并行性将允许嵌套 omp 并行 for 循环也被并行化 但我在嵌套的 for 循环 for 内部 中使用塌陷 2 有区别吗 为什么或者为什么不 假设最好的情况 循环索引之间没有依赖性并且其他条件相同 是的 有很大的区别 使用c
  • Asp.net Core azure Web 应用程序日志记录

    我有一个 asp net core 部署到 azure 我正在尝试使用以下命令配置日志记录到我的应用程序Microsoft Extentions Logging接口 目前我的应用程序正在将日志写入网络应用程序存储中的日志文件文件夹 这似乎是
  • 如何为 React 路由设置 apache 服务器?

    我的 React 应用程序在本地开发服务器上运行良好 但当我将生产就绪文件直接转储到 Apache 的 htdocs 目录时 它不起作用 这是我所拥有的 var www index html var www bundle js 我有 Doc
  • 如何使用 Zend 2 保存处理程序 DbTableGateway?

    The Zend Session 保存处理程序本教程提供了 DbTableGateway 的示例 其中使用未定义的 adapter 变量创建 TableGateway 我想使用处理程序来绑定会话管理器 来自教程的上一页 到我的数据库中的会话
  • 默认情况下使用多个字段进行多重搜索

    所以 有一个 jqGrid 带有声明 如下所示 grid jqGrid bunch of stuff searchGrid multipleSearch true 这很好 当我单击 搜索 按钮时 它会为我带来模式形式 我猜是第一列和 sop
  • 执行 C# 交互式 powershell 脚本

    假设我使用 C 执行 powershell 脚本 脚本执行的结果是请求凭据才能继续 Example Pipeline pipeline runspace CreatePipeline pipeline Commands AddScript
  • 如何在 WXP(和更新的 MSWindows)上使用 C# 终止所有[大]子进程

    问题 如何确定子进程中的所有进程流程树杀掉他们 我有一个用 C 编写的应用程序 它将 从服务器获取一组数据 生成第 3 方实用程序来处理数据 然后 将结果返回给服务器 这工作正常 但由于跑步消耗a lotCPU 和may需要长达一个小时 我
  • 具有 C++ 虚函数时的 GDB 不完整类型

    我刚刚注意到一些奇怪的事情 当我在类中添加 虚拟关键字 除构造函数之外的任何函数 时 我无法在 GDB 中显示对象的内容 GDB 说 不完整类型 这是代码 reco h ifndef RECO H define RECO H include
  • 使用 api 1.1 的 Twitter POST 问题

    我们刚刚更改为 Twitter api 1 1 现在发推文不起作用并返回错误 远程服务器返回错误 400 错误请求 对此进行的研究表明 这与身份验证有关 但我们正在发送刚刚从登录页面获得的 accessToken 和机密 在 api 1 0
  • Linux内核中使用的三个优先级有什么区别?

    我是 Linux 内核的新手 现在我正在研究 Linux 内核中的进程调度 Linux 中存在三种类型的优先级 静态优先级 动态优先级 实时优先级 现在我明白的是 静态优先级和动态优先级仅针对传统进程定义它们只能取 100 到 139 之间
  • 使用令牌保护 REST Web 服务 (Java)

    这个问题在某种程度上与下面链接的问题相关 但是 我需要更清楚地了解某些方面和一些附加信息 参考 REST Web 服务身份验证令牌实施 背景 我需要使用令牌实现 REST Web 服务的安全性 Web 服务旨在与 Java 客户端一起使用