gpt4 book ai didi

feathersjs - 将自定义身份验证策略添加到 Feathers 应用程序的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 20:57:56 36 4
gpt4 key购买 nike

我的 Feathers 应用程序需要能够具有两种 JWT 身份验证策略。对于users服务,我需要有,例如,all: [authenticate('carrier')]而不是 all: [authenticate('jwt')]在我的钩子(Hook)里。对于其余服务,authenticate['jwt']是需要的。

为此,我在 authentication.js 中注册了一个名为 CarrierStrategy 的自定义策略。如下:

module.exports = function auth(app) {
const authentication = new AuthenticationService(app)

// register all of the strategies with authentication service
authentication.register('carrier', new CarrierStrategy())
authentication.register('jwt', new JWTStrategy())

// register the authentication service with your app
app.use('/api/authentication', authentication)
}

在 config/default.json 中,我还注册了这个策略,如下所示:
authStrategies: ["carrier", "jwt"]

CarrierStrategy 需要使用一些自定义逻辑稍微不同地处理传入的 Authorization header 。

当我使用 Postman 发送对该服务的请求时,即 localhost:3030/users在 header 中使用 JWT token ,我收到以下错误。
Invalid authentication information (strategy not allowed in authStrategies)'
如果这是向应用程序添加自定义策略的正确方法,请指导我。

最佳答案

我有一个类似的问题。我想要有状态和无状态的 JWT 身份验证。问题在于,如果您只是在 authentication.js 中执行此操作

authentication.register('jwt', new JWTStrategy());
authentication.register('jwt-stateless', new JWTStrategy());
然后,当您使用 JWT token 提交请求时,它将匹配其中一个 token ,您最终会在某处的某个服务中遇到问题。
我最终在 authentication.js 中创建了一个这样的自定义策略:
class StatelessJWTStrategy extends JWTStrategy {
get configuration () {
const authConfig = this.authentication.configuration;
const config = super.configuration;

return {
...config,
entity: authConfig.entity,
service: authConfig.service,
header: 'Authorization',
schemes: [ 'STATELESS' ]
};
}
}
基本上是稍作修改的 JWTStrategy在 Authorization header 中使用 STATELESS 而不是 Bearer 或 JWT。这不是一个很好的解决方案,但它有效。
然后我也在 authentication.js 中做了这个
authentication.register('jwt', new JWTStrategy());
authentication.register('jwt-stateless', new StatelessJWTStrategy());
然后你需要修改你的 config.json 文件。在身份验证部分添加:
"jwt-stateless": {
"entity": null
},
"jwt": {
"entity": "user",
"service": "users"
},
"entity": "user",
"service": "users",
"authStrategies": [
"jwt-stateless",
"jwt",
"local"
],
现在您应该能够在您的钩子(Hook)中使用 jwt-stateless auth 机制,如下所示:
authenticate('jwt-stateless')
前往 here创建您的无状态 JWT。使用您的 config.json 中的颁发者和 aud 填写 iss 和受众详细信息,并将用户 ID 添加到子字段。在底部签名验证字段中从 config.json 弹出您的 secret ,左侧的 token 应该进行身份验证。

关于feathersjs - 将自定义身份验证策略添加到 Feathers 应用程序的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59942373/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com