2次发布
0.1.1 | 2024年1月21日 |
---|---|
0.1.0 | 2024年1月20日 |
#376 in 身份验证
379 每月下载
21KB
312 行
axum-token-auth
axum-token-auth
是用于验证axum请求的中间件。
关于此Crate的更多信息可以在Crate文档中找到。
许可证
本项目采用MIT许可证。
贡献
除非您明确表示,否则您提交的任何旨在包含在axum-token-auth
中的贡献,都将根据MIT许可证授权,不附加任何额外条款或条件。
lib.rs
:
此Crate实现了对[axum]的请求进行身份验证的中间件。总体目标是提供简单、无密码的身份验证,以实现安全网络通信。会话密钥存储在cookie中,并使用秘密(使用tower-cookies
crate中的加密实现)进行签名。由于签名,会话密钥不能被修改。除了存储秘密之外,系统是无状态的,不需要在服务器上进行存储。
在正常情况下,令牌是作为外部信息提供给用户的。例如,用户将从SSH会话启动服务器并将令牌复制到浏览器中。或者,如果连接被定义为可信的(例如,如果它是回环连接),则无需任何检查即可进行身份验证。
这在用户启动服务器进程并希望在服务器不向未经验证的网络安全连接公开此功能的情况下通过网络控制服务器时很有用。在这种情况下,如果用户在初始连接时在URL中提供正确的令牌,则服务器将在用户的浏览器中设置cookie,后续请求将自动验证,无需在URL中再提供令牌。
用户不需要账户、Passkey、OpenID Connect (OIDC)、OAuth、OAuth2、FIDO U2F、FIDO2、WebAuthn、SAML、LDAP、Kerberos、RADIUS或SSO凭证。开发者也不需要配置这些服务。相反,用户在初始连接到服务器时使用带有正确令牌的查询参数的URL。
典型流程
- 用户启动或连接到服务器,用户会看到初始认证令牌(例如,服务器在控制台打印包含令牌的URL)。
- 用户通过浏览器连接到服务器。在用户的第一个HTTP请求中,令牌包含在URL的查询参数中。
- 在HTTP响应中,包括一个新的[会话密钥]作为新的cookie。请求由下一个服务进一步处理,同时提供会话密钥信息。
- 用户浏览器的后续请求包含新设置的cookie(并且不再在URL中包含令牌),中间件将会话密钥信息提供给下一个服务。
可信连接流程
在可信连接的情况下,不需要令牌进行初始认证。会话密钥仍然按照上述方式颁发。
Cookie过期
存储在客户端浏览器上的cookie可以是持久化的(响应设置一个带有Expires
字段的cookie)或者可以是“会话cookie”。如果[AuthConfig]中的expires
字段设置为None
,成功的认证将设置一个“会话cookie”,意味着cookie不包含Expires
或Max-age
键。否则,当expires
字段设置时,浏览器将持久化存储cookie。(注意,此过期信息不能用于安全目的,因为它完全由客户端的浏览器控制。)
会话密钥过期
包含会话密钥的cookie上的签名有效,直到持久化密钥更改。 (如果您需要使密钥失效,请切换持久化密钥或使用功能更强大的认证中间件。)
更多需求
如果这个crate不能满足您的需求,请检查axum-login
。
依赖项
~8–16MB
~225K SLoC