18次发布

0.12.1 2021年2月15日
0.12.0 2020年9月10日
0.11.0 2020年8月7日
0.10.1 2020年3月20日
0.3.1 2017年6月16日

#643 in 密码学

Download history 1/week @ 2024-02-20 5/week @ 2024-02-27 8/week @ 2024-03-12 62/week @ 2024-04-02

每月62次下载

MIT/Apache

69KB
1K SLoC

websession.rs

build status docs status

Rust的Web会话支持

概述

websession提供了一个简单的Web会话管理接口,具有可靠的加密密码(目前为bcrypt)和会话标识符,这些标识符在活动或超时后自动续订,并在非活动时过期。

用户可以由任何有效的UTF-8标识,包括用户名、电子邮件地址、数字或几乎任何其他您能想到的东西。然而,FileBackingStoreMemoryBackingStore都默默地用"\u{FFFD}"替换"\n",就像String::from_utf8_lossy对无效的UTF-8所做的那样。(这不太可能在生产环境中引起问题,因为名字中嵌入换行符的用户可能根本无法正确登录。)

预期元数据(真实姓名、联系信息、基于用户的权限等)将由使用websession的应用程序进行管理。

用法

要使用此软件,您需要选择一个BackingStore实现。

FileBackingStore需要一个包含标识符和密码的现有文件。至少,您可以从一个空文件开始,然后向其中添加用户。此文件通常在运行之间持续存在,并且假定实现具有适当的读写权限。[所提供的实现尽力确保内容尽快写入磁盘。]

后端存储库旨在通过一个Authenticator进行访问。

请参阅lib.rs中的测试和示例,因为它们会被编写。(目前请参阅examples.md。)

  • 在0.12.1中,FileBackingStore使用的默认bcrypt轮数从8更改为10。FileBackingStore::new_with_cost允许您为您的特定系统选择轮数。下面将提供有关如何选择适当轮数的指导。

如果您使用MemoryBackingStore,凭证不会在重启后持续存在。

实现说明

BackingStore 特性的实现负责适当地管理密码,尤其是不要以明文形式存储它们。提供的实现不会将明文密码存储在磁盘上,除非它们被故意滥用。[并未努力防止未加密密码泄露到交换空间,但欢迎降低这种泄露概率的拉取请求。]

特别地,当实现可以检测到提供给预期加密凭据的方法的未加密凭据时,应使用 BackingStoreError::InvalidCredentials

为实现 FileBackingStore 的文件提供了一些保护措施,即在重写时复制现有文件的模式,但这仅在类UNIX操作系统上实现。在Windows上尝试保留权限,但尚未经过严格测试。

bcrypt 备注

默认实现使用十轮(10轮)的 bcrypt。您应运行 cargo bench 来查看在您的目标系统上运行 bcrypt 需要多少时间。如果10轮每迭代小于0.01秒(10,000,000纳秒)或大于0.25秒(250,000,000纳秒),则应

  • 实现自己的 BackingStore,其中使用更多或更少的轮数,根据需要
  • 实现自己的 BackingStore,其中使用更合适的加密方法
  • 使用 FileBackingStore::new_with_cost 而不是 FileBackingStore::new 并指定一个合适的值

每增加一轮,计算时间加倍,因此成本增加2将使每哈希时间增加4倍,成本减少2将使每哈希时间减少到原来的1/4

选择轮数(或接受默认值)后,它将持久化生成的密码,即使底层默认值更改(如 pwhash 1.0 和 websession 0.12.1 中的情况)。现有密码将继续使用旧值,直到它们被作废。但是,新密码将使用新值。

作为数据点,在轻负载的Linux系统上

CPU 轮数 频率 模式 每迭代纳秒数
Core 2 Duo T9300 : 8 : 2.50 GHz 32位 20,881,257 (± 247,164)
Core i7-4770L : 8 : 3.50 GHz 64位 13,961,105 (± 202,267)
Core i7-4770L : 10 : 3.50 GHz 64位 55,161,654 (± 678,113)

在上述Core 2 Duo T9300上,7轮将足够,而8轮对于Core i7-4770L是合理的。如上所述,10轮完成时间大约是8轮的4倍,有些过多。

(欢迎提供更多数据点。)

许可

本软件采用Apache和MIT双许可。

依赖关系

~1.8–2.4MB
~38K SLoC