如何使HTML身份验证表单和JSON Web令牌在Ionic/Angular中一起通信



我正在开发一个Ionic应用程序
一方面,我有一个auth基本表单,人们在其中填写用户名和密码。另一方面,我想用JSON Web令牌和Node JS实现身份验证
工作流程如下:用户一旦填写凭据,就会向其发送POST请求。如果这些凭据是正确的,则用户可以访问应用程序并获得访问令牌作为响应。

问题是,我有点迷失了所有这些概念。我建立了一个表单,并通过POST请求发送信息。我设法用NodeJS创建了一些API,这没关系。我也看到了如何构建一个经过身份验证的Web服务(例如:https://github.com/jkasun/stack-abuse-express-jwt/blob/master/auth.js)
但我具体不理解html表单和授权检查部分之间的链接
更清楚地说,如何使html部分和NodeJS脚本一起通信?

在发布这个问题之前,我做了很多研究,发现了很多关于构建一个真正的API的东西。但是,关于如何让它与客户端部分(我指的是表单(进行沟通,我几乎没有什么建议,这就是我必须做的。
如果有人对此有任何资源(文档、Github示例…(,我将不胜感激。但如果有人试图让我理解这些概念,我也会非常高兴。我想我必须提高我的知识,这样我才能测试一些POC。

非常感谢!

JWT通用流程:

1-使用策略进行身份验证(你做到了(

2-交付一个accessToken和响应(你完成了(

3-客户端必须存储此accessToken(LocalStorage是最好的位置,而不是cookie:它们容易受到csrf攻击(

4-在你要向保护区(用户应该在那里进行身份验证和授权(提出的每一个请求中,确保向你发送accessToken,你可以将其放在授权头上,一个自定义头上,直接放在请求的主体中。。。Basicaly只是确保正确发送。

5-在接收客户端请求的服务器上,您需要验证该令牌(通过检查accessToken的签名来验证(。

6-如果他被授权了,那就太好了,如果没有,就发回一个HTTP未授权错误。

这是我在头上使用accessToken+passportjs jwt:的实现

客户端代码

存储令牌:

localStorage.setItem('accessToken', myAccessToken);

发送:

const myAccessToken = localStorage.getItem('accessToken');
{
headers: {'Authorization', `Bearer ${myAccessToken}`}
}

服务器代码

1-配置护照

passport.use('jwt', new JwtStrategy({
jwtFromRequest: jwtPassport.ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: myAccessTokenSecret,
passReqToCallback: true
}, (req, payload, done: (err?, user?) => void): void {
User
.findOne({where: {id: req.params.id}})
.then((user: User) => {
if (!user) {
return done(new Error(`No user found with id: ${req.params.id}`), null);
}
return done(null, user);
})
.catch((e: Error) => done(e, null));
}));

注意回调:如果您的回调被调用,则表示passport已成功验证令牌(它是有效的(。在我的例子中,我在数据库中获得了用户详细信息,这是将被返回并放入req.user对象中的用户,该对象传递给下面的控制器:

2-最后,控制器路线(保护区(:

.get('/users/:id', passport.authenticate('jwt'), (req, res, next) => {
// do stuff in protected area.
}

就是这样。如果你想要更多的安全性,请检查refreshTokens的实现。

我使用passport是因为我发现它与我的情况相关,但您可以通过使用jsonwebtoken并只调用其"来编写自己的处理程序;验证";作用

您可以在此处找到passport jwt策略的文档=>http://www.passportjs.org/packages/passport-jwt/

最新更新