ils项目中没有权限

标题中没有遗漏的空格。这不是关于任何安全登录,而是关于ils项目中没有权限。

这个是非常有趣的,因为它不依赖任何中央党派(如Facebook和Twitter等OAuth提供商),从而避免了OAuth的所有陷阱(Homakov经常批评OAuth)。它也不是密码管理器。它只是一个客户端软件,执行一些密码,以证明服务器,它确实是正确的用户。要做到这一点,关键在于两部分:

  • 使用主密码生成私钥。它使用密钥派生函数,保证生成的私钥具有足够的熵.这样,使用相同的主密码和相同的电子邮件,您将得到相同的私钥每次使用密码,因此相同的公钥。你是唯一一个能证明这个公钥是你的,用你的私钥签名的人。
  • 服务提供商(网站)通过在注册时将公钥存储在数据库中,然后在随后的每次登录时查找它,从而确定您的身份。

客户端部分最好由本地客户端执行-浏览器插件(一个可用于Chrome)或特定于操作系统的应用程序(包括移动应用程序)。这听起来可能很乏味,但实际上它既快速又简单,而且是一次性事件(而且比密码管理器更容易)。

我不得不承认-我喜欢它,因为我有一个类似的想法已经有一段时间了。在我生物特征识别方案的缺陷时,我提出了(幻灯片23)一种使用生物特征识别(例如用手机扫描)+密码生成私钥(使用密钥派生函数)的识别方案。而且这种生物识别技术在将来可以很容易地添加到SecureLogin中。

当然,这不是所有的玫瑰,因为有一个问题还没有完全解决--撤销。如果有人窃取了您的主密码(或者您怀疑它可能被窃取),您可能需要更改它并通知所有服务提供商,以便他们可以用新的公钥替换您的旧公钥。这有两个含义-首先,你可能没有你注册的网站的完整列表,而且由于你可能已经改变了设备,或者使用了多种设备,所以可能有一些网站永远不会知道你的密码更改。有一些建议的解决它们并不是协议的固有特性,而是依赖于集中式服务。第二个问题是-如果攻击者首先更改您的密码怎么办?为了防止这种情况,服务提供商可能应该依赖电子邮件验证,这既不是协议的一部分,也不是协议的鼓励。但无论如何,作为一种保障,你可能不得不这样做。

Homakov不仅定义了协议,而且还提供了本机客户端的实现,这样任何人都可以开始使用它。所以我决定把它添加到为此,我需要服务器验证的java实现,而且由于不存在这样的实现(目前只提供ruby和no因此,如果您打算在JavaWeb应用程序中使用SecureLogin,则可以使用它而不是推出自己的应用程序。在实现它时,我遇到了一些可能导致协议更改的小问题,因此我猜想向后兼容性也应该包含在协议中(通过版本控制)。

那么,代码是什么样子的呢?在客户端,您有一个按钮和一个小小的javascript:

1
2
3
4
5
<!-- get the latest sdk.js from the GitHub repo of securelogin
   or include it  -->
<script src="js/securelogin/sdk.js"></script>
....
<p class="slbutton" id="securelogin">&#9889; SecureLogin</p>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$("#securelogin").click(function() {
  SecureLogin(function(sltoken){
      // TODO: consider adding csrf protection as in the demo applications
      // Note - pass as request body, not as param, as the token relies
      // on url-encoding which some frameworks mess with
      $.post('/app/user/securelogin', sltoken, function(result) {
          if(result == 'ok') {
              window.location = "/app/";
          } else {
              $.notify("Login failed, try again later", "error");
          }
      });
  });
  return false;
});

一个按钮可以用于登录和注册,或者您可以有一个单独的注册表单,如果它必须包括更多的细节,而不仅仅是一封电子邮件。由于除了基于密码的登录之外,我还添加了SecureLogin,所以我保留了这两种表单。

在服务器上,只需执行以下操作:

 

 

https://zhuanlan.zhihu.com/p/410718999

这是Spring-MVC,但它可以是任何Web框架。您也可以将其以某种方式合并到弹簧安全流中。我从来不喜欢春季安全的复杂性,所以我手动做了。此外,可以返回正确的状态代码,而不是字符串。请注意,我正在通过电子邮件进行查找,然后才检查公钥(就像密码一样)。如果在公钥列上有适当的索引,则可以采用相反的方法。此外,您还需要有一个密码更改处理代码,它只是一个GET端点,它实现注意:由于这里的令牌是get param,所以如果SpringURL-解码param,它可能不能正常工作,所以请尝试request.getParameter(..))。

我不建议拥有一个只使用SecureLogin的系统,因为这个项目还处于早期阶段,用户可能对此并不满意。但是,把它作为一种选择当然是个好主意。

 
posted @ 2021-09-15 19:31  javd9w  阅读(89)  评论(0)    收藏  举报