#cookies #access-control #autorization #sercurity

runeauth

Runeauth - 简单可扩展的Cookies

5次发布

0.1.4 2024年2月12日
0.1.3 2024年2月12日
0.1.2 2024年2月12日
0.1.1 2023年11月26日
0.1.0 2023年11月26日

#154 in 认证

Download history 406/week @ 2024-04-23 148/week @ 2024-04-30 206/week @ 2024-05-07 470/week @ 2024-05-14 171/week @ 2024-05-21 458/week @ 2024-05-28 357/week @ 2024-06-04 265/week @ 2024-06-11 319/week @ 2024-06-18 164/week @ 2024-06-25 300/week @ 2024-07-02 266/week @ 2024-07-09 260/week @ 2024-07-16 418/week @ 2024-07-23 362/week @ 2024-07-30 315/week @ 2024-08-06

1,385 每月下载
用于 4 个crate(2个直接)

MIT 许可证

70KB
1.5K SLoC

Futhark - Rust中的Runes实现

这是Rusty Russell原版Runes库的Rust实现。https://github.com/rustyrussell/runes.

什么是Runes?

Runes是可扩展的授权Cookies,类似于Macaroons https://research.google/pubs/pub41892/,但更简单。可扩展意味着拥有服务器颁发的Cookies的客户端可以推导出一个具有额外限制的Cookies,这些限制不能从推导出的Cookies中移除。然后这个Cookies可以被传递给其他方以在服务器上进行身份验证。

要了解更多关于Runes的动机,请查看原始仓库。

覆盖率和功能

此实现完全符合给定的测试向量集。然而,目前缺少对替代方案的函数值的清晰实现。这些将在未来的更新中包含。

  • 符合测试向量
  • 对值的函数检查
  • 完整的crate文档

Runes语言

(有关深入解释,请参阅原始仓库)

Runes 是一组必须通过的 限制。一个 限制 由一个或多个 替代方案 组成,其中至少一个 替代方案 必须通过。

替代方案

一个 替代方案 是一个形式为(无空格)的字符串

ALTERNATIVE := FIELDNAME CONDITION VALUE

FIELDNAME 只包含UTF-8字符,不包括标点符号字符

! " # $ % & ' ( ) * +, - . / : ; < = > ? @ [ \ ] ^ _ \` { | } ~

尽管如此,标点符号字符可以出现在 VALUE 中,但 &|\\ 必须用 \ 转义,因为这些用于分隔 替代方案限制

CONDITION 是以下值之一,具有相应的检查

CONDITION 检查
! 字段缺失
= 存在且完全等于
/ 存在且不等于
^ 存在且以...开始
$ 存在且以...结束
~ 存在且包含
< 存在,是有效的整数(可能是符号整数),并且数值小于
> 存在,是有效的整数(可能是符号整数),并且数值大于
{ 存在且字典序小于(或更短)
} 存在且字典序大于(或更长)
# 注释(总是通过)

限制

限制是一组通过逻辑“或”条件链接的备选方案,该条件由OR表示,并用|表示;限制之间由&分隔。例如字符

cmd=foo|cmd=bar&subcmd!|subcmd={get

第一个限制要求cmdfoobar,第二个限制要求subcmd不存在,或者字典序小于(或更短)get

Rune 授权

每个rune都带有一个SHA-256验证码,确保rune中不能被删除任何限制。每个authcode的基础是一个秘密(小于56字节),只有发布rune的服务器才知道。

从这个authbase开始,每个限制都被追加到一个rune上,并更新authcode,假设秘密以相同的方式处理

  • 按照SHA-256的要求填充限制authbase的秘密)以使结果为64的倍数
    • 追加0x80
    • 追加0(使得结果为64的倍数)。
    • 追加限制的大端64位位计数(len)。

这样,authcode总是SHA-256摘要。

然后通过向rune添加一个新的限制并更新authcode来实现派生。

编码

字符base64编码的(URL安全),从SHA-256 authcode开始,然后是限制(一个或多个),用&分隔。

更多

更多见解、附加信息和示例,请访问原始仓库https://github.com/rustyrussell/runes

依赖项

~4.5–6.5MB
~119K SLoC