- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不久前,我们需要一个用于多个Web服务之间的单点登录身份验证的解决方案。至少在那时,我们认为OpenID协议过于复杂,因此我们不相信Ruby on Rails插件。因此,我们设计了自己的协议,而不是实现OpenID提供程序和OpenID使用者。
我有两个问题:
不创造是一件坏事吗
我们自己的OpenID提供程序和设置
我们的OpenID消费者只接受吗?
不公开登录或注册
允许,我们想保留
验证简单。
您可以在以下设计中发现严重错误或漏洞吗?
如果您是一个公社可以批准这种设计,那么我将考虑将该代码提取到Ruby on Rails插件中。
请查看flowchart and sequence diagram。
细节:
身份验证提供程序(“ AP”):
拥有所有数据的中央服务
关于用户。
此设置中仅存在一个“ AP”。
可能有多个“ AP”,但是在这种情况下应该不相关。
“ AP”预先知道每个“ S”。
身份验证客户端(服务“ S”):
存在几种内部和外部Web服务。
每个服务都事先知道“ AP”及其公钥。
演员(“ A”):
进行身份验证的最终用户
通过用户名和密码与AP保持联系
可以在登录之前直接请求“ S”或“ AP”的任何URI
“ A”,“ S”和“ AP”之间的连接由HTTPS保护。
认证逻辑简要描述:
这些是对图形流程图和序列图的描述,它们链接在本文的顶部。
1)身份验证提供程序“ AP”
“ AP”向“ S”发出服务器到服务器的HTTP POST请求,以获取随机数。
“ AP”生成身份验证令牌。
身份验证令牌是一个XML实体,其中包括:
到期日期(从现在开始2分钟),
先前要求的随机数(以防止重播),
标识名称“ S”(Service_1的令牌对Service_2不利),
有关最终用户的信息。
身份验证令牌使用AES256加密,加密密钥和初始化向量由AP的专用RSA密钥签名。
首先对结果字符串(“数据”,“键”和“ iv”)进行Base64编码,然后对URL进行编码,以允许它们在URL查询字符串中传递。
最终用户“ A”通过HTTP重定向到服务“ S”(HTTPS GET请求)。
2)服务“ S”
从用户代理接收URL参数中的身份验证令牌。
使用AP的预共享公用密钥解密身份验证令牌。
仅接受一个身份验证令牌一次(令牌包含仅有效一次的随机数)。
检查身份验证令牌中的标识名称是否与服务名称相对应。
检查身份验证令牌是否未过期。
备注:
如果其他人也可以解密身份验证令牌,这不是问题,因为它不包含有关用户的机密信息。但是,至关重要的是,除了AP之外,没有其他人能够生成有效的身份验证令牌。因此,涉及RSA密钥对。
RSA专用密钥仅用于对令牌进行签名,因为它不能加密比实际密钥长度更长的数据。因此,AES用于加密。
由于身份验证令牌是作为HTTP GET请求传递的,因此它将被存储,例如在Apache的日志文件中。使用一次性随机数和到期日期应将重播攻击的可能性降到最低。 POST请求将需要一个HTML页面,该页面具有由Javascript自动提交的表单,这就是使用GET的原因。
服务“ S”仅在服务器到服务器API请求中生成随机数。因此,未经身份验证的生成请求不应构成DoS漏洞。
最佳答案
您会混淆身份验证(“我是我所说的我”)和授权/访问控制(“我被允许访问此文件”)。您可以只实现OAuth,然后使用“是否允许该OAuth身份访问我?”通过HTTPS查询服务器。您无需担心重播攻击,因为您正在使用HTTPS。
“安全性很难,所以我会自己设计。”
身份验证令牌使用AES256加密,加密密钥和初始化向量由AP的专用RSA密钥签名。
AES-256和AES-192的密钥计划很薄。但是,您并不是出于保密目的使用它。您将其用作某种“完整性”检查。它不起作用:攻击者获得“签名”身份验证令牌。攻击者收回了密钥和IV。攻击者使用相同的密钥和IV加密不同的身份验证令牌,并使用相同的“签名”。
对其进行哈希处理并对其进行签名有什么问题?还要注意,如果要使用自定义签名,则需要注意填充(IIRC PKCS,无论添加至少11个字节)。
编辑:并且,如果您使用的密码应该使用哈希/ MAC,则您实际上不应该设计安全协议!
关于security - 您可以在我的身份验证协议(protocol)中发现漏洞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3502734/
所以我实现了ciphersaber-1 .它几乎可以工作,我可以解密 cstest1.cs1。但我无法让 cstest2.cs1 正常工作。 输出是: The Fourth Amendment to
更改 unsat 查询中断言的顺序后,它变为 sat。 查询结构为: definitions1 assertions1 definitions2 bad_assertions check-sat 我使
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我的应用程序用于使用 wifi 进行实时视频流和录制(音频和视频)。使用以下依赖项: repositories { maven { url 'https://raw.github.com/iParse
我正在使用 Delphi,并且我想在我的应用程序中使用 ActiveX 组件(用于压缩)。这会让我的程序更容易受到病毒攻击吗?我的程序是一个备份应用程序,它使用 FTP 和套接字来传输文件和消息。我的
我用这个函数来防止SQL注入(inject) function cleanQuery($string) { if(get_magic_quotes_gpc()) // prevents du
最近我在向我的 friend 解释参数化及其优势,他问我在安全性方面它比 mysqli_escape_string 有什么好处。具体来说,您能想到尽管输入字符串被转义(使用 mysqli_escape
我想我在最新版本的 Highstock 中发现了一个错误: 定义了以下 RangeSelector: rangeSelector: { buttons: [{ typ
我在阅读有关 C 语言字符串中的漏洞的文章后,发现了这段代码。谁能给我解释为什么会这样?提前致谢。 int main (int argc, char* argv[]) { char a[16];
我最近浏览了 php 等的 emacs 模式,并决定选择 nXhtml。但是,我不断收到以下错误:每当我打开一个 html 文件时,整个文件都以蓝色突出显示。不用说,这很烦人。我认为这可能是因为我的
我被分配到我公司的一个遗留 Web 应用程序,在研究源代码一两天后,我发现了一个类似于以下内容的 SQL 注入(inject)向量: mysql_query("SELECT * FROM foo WH
在坚持代码分析错误的过程中,我正在将我的属性更改为具有私有(private) setter 。然后我开始尝试更多地了解为什么。根据一些研究,MS 说 this : A writable collect
我最近开始使用 AngularJS,我想我遇到了一个奇怪的错误。 首先,这是一些工作代码: 查看: Delete Num
阅读时djangobook chapter ,我遇到了提到 csrf 漏洞的部分,其中注销链接被放置在隐藏的恶意站点中。 在我使用 django 创建的 Web 应用程序中,我使用了类似的注销链接 基
以前,在我的应用程序中,我得到了一个 NPE,并且通过在 NullPointerException 处设置断点,可以获得中断、堆栈跟踪(在“调试”窗口中)以及“变量”窗口中的当前变量。 但是,现在其他
我下载了 sponza_obj.rar (sponza.obj + sponza.mtl) 和 sponza_textures.rar Crytek 网站。看起来缺少gi_flag.tga。我在哪里可
在我的应用程序中,我们有许多用户,他们都与不同的调用中心相关。在 URL 中,有一个向后的 hack,他们可以在 ? 后面输入 call_center=number。它将引导他们进入不同的调用中心数据
我正在建立一个带有 SQL 注入(inject)漏洞的网站用于测试目的。但是,我只想配置 SQL 盲注。我有这个 PHP 代码: NEW
我们有一个 ASP.NET/C# 网站。我们的开发人员在亚洲离岸,我刚刚发现他们一直在网站前端放置原始 SQL。 我担心我们现在容易受到 SQL 注入(inject)攻击。有谁知道我如何检测网站上的漏
我正在尝试从代码运行 Microsoft Rdp 应用程序。 我有以下伪代码,SonarQube 提示命令注入(inject)漏洞 String rdpFilePath = myObject.getR
我是一名优秀的程序员,十分优秀!