认证插件
什么是身份验证插件?
它是一种插件,允许管理谁可以访问或发布到特定的软件包。 默认情况下,内置了htpasswd
,但可以轻松地被你自己替换。
开始
认证插件在 auth:
部分中定义,如下所示:
auth:
htpasswd:
file: ./htpasswd
还可以将多个插件串联起来:
auth:
htpasswd:
file: ./htpasswd
anotherAuth:
foo: bar
bar: foo
lastPlugin:
foo: bar
bar: foo
如果链中的一个插件能够处理请求,那么接下来的插件将被忽略。
认证插件是如何工作的?
基本上我们需要返回一个带有一个名为 authenticate
的方法的对象,该方法将接收3个参数(user, password, callback
)。
在每次请求上,authenticate
将被触发,插件应返回凭据,如果 authenticate
失败,它将默认回退到 $anonymous
角色。
API
interface IPluginAuth<T> extends IPlugin<T> {
authenticate(user: string, password: string, cb: AuthCallback): void;
adduser?(user: string, password: string, cb: AuthCallback): void;
changePassword?(user: string, password: string, newPassword: string, cb: AuthCallback): void;
allow_publish?(user: RemoteUser, pkg: AllowAccess & PackageAccess, cb: AuthAccessCallback): void;
allow_access?(user: RemoteUser, pkg: AllowAccess & PackageAccess, cb: AuthAccessCallback): void;
allow_unpublish?(
user: RemoteUser,
pkg: AllowAccess & PackageAccess,
cb: AuthAccessCallback
): void;
apiJWTmiddleware?(helpers: any): Function;
}
只有
adduser
,allow_access
,apiJWTmiddleware
,allow_publish
和allow_unpublish
是可选的,verdaccio 在所有这些情况下提供了备用方案。
apiJWTmiddleware
方法
自 v4.0.0
起
apiJWTmiddleware
是在 PR#1227 上引入的,以便完全控制令牌处理程序,重写此方法将禁用 login/adduser
支持。 我们建议除非完全必要,否则不要实现此方法。 请参阅此处的完整示例。