CredentialsToken

Kitura 插件,用于 Credentials 系统,通过令牌头部的用户名/密码启用连接管理。示例代码可以在 Sample 目录中找到。

通用 CredentialsToken 类型

这是令牌系统的包装器/插件。它处理身份验证中间件机制,并且相当透明和可配置。

CredentialTokenVerifier 类型规范

这是系统的核心:根据令牌和用户名/密码组合的存储方式,开发者必须提供一个兼容的类型,以使插件正常运行。在示例中,我们使用了一个简单的(且愚蠢的)内存系统,但通常会使用文件/数据库/ ...

基本用法

配置插件

let memoryTokens = MemoryTokenAuth()
let memTokenCred = CredendialsToken(memoryTokens)

let credentials = Credentials()
credentials.register(plugin: memTokenCred)

(来自示例代码,只是一个愚蠢的内存用户管理类,它不会在重启后存活)

设置路由

通过以下两种方式之一设置将使用此插件进行身份验证的路由

router.all("/hello.*", middleware: [credentials])

将这些路由设置为在每次请求时都必须具有令牌或用户名/密码(对于令牌验证的 API 非常有用)

router.all("/profile", handler: [credentials.authenticate(credentialsType: memTokenCred.name, successRedirect: nil, failureRedirect: "/login")])

将这些路由设置为必须在headers/表单数据或会话中具有身份验证,并在需要时将会话中的凭据存储在会话中。

使用场景

API/主要为令牌

您将需要一个登录(可能还有注册)路由来处理 POST 表单以生成或获取访问令牌。然后,所有受保护的路由都可以与 Credentials 中间件一起使用,并且将与相关头部中传递的令牌匹配。

前端/主要为会话

您不能真正为此使用中间件机制。您将需要使用处理程序系统来保护路由,因为会话管理和可能重定向到登录页面。

混合

当然,您可以混合使用这两种方式,使用通配符系统。唯一的问题是,您不能将中间件机制与重定向插件一起使用。如果混合使用这两种方式,您将需要决定该插件是否可能重定向,如果是,

注意事项

Credential 系统的工作方式是,您的程序可能必须与顶层凭证系统分开与 CredentialTokenVerifier 实例通信,例如,如果您想要有一个注册/登录机制来保存您的数据。

有时它可能会使代码有点笨拙,这就是为什么它是一个协议:您可以实现数据库连接类来处理所有加载/保存操作,并且它可以符合该协议,从而合并凭证插件和您无论如何都会使用的单例。