我正在实现刷新令牌,我使用passportjs。我不完全理解的是,我应该在哪里以及如何检查访问令牌的有效性,以及在无效令牌到达的情况下抛出< code > tokenexpire exception 。
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(
private readonly authService: AuthService,
) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey: process.env.JWT_SECRET,
});
}
public async validate(payloadDto: PayloadDto): Promise<PayloadDto> {
const validUser = await this.authService.validateUser(payloadDto);
return { id: validUser.id, phone: validUser.phone };
}
}
validateUser
方法当前如下所示:
public async validateUser(payload: PayloadDto): Promise<UserEntity> {
const retrievedUser: UserEntity = await this.userService.retrieveOne(payload.phone);
if (retrievedUser) {
return retrievedUser;
} else {
throw new HttpException('Invalid User', HttpStatus.UNAUTHORIZED);
}
}
我想知道这样检查是否安全:
@Injectable()
export class RefreshAuthGuard extends AuthGuard('jwt') {
public handleRequest(err: any, user: any, info: Error): any {
if (info) {
if (info.name === 'TokenExpiredError') {
throw new HttpException('TokenExpired', HttpStatus.UNAUTHORIZED);
} else {
throw new HttpException('Unauthorized', HttpStatus.UNAUTHORIZED);
}
}
}
}
我建议改变你的认证流程如下(也见线程和线程):
/秘密
TokenExpiredError
/秘密
刷新令牌的全部目的是它永远不会与资源服务器共享,也不会随每个请求一起发送;这提高了安全性。如果资源服务器自己发出刷新请求,您就无法实现这一目的。如果资源服务器和身份验证服务器相同,您仍然可以从不发送如此多的长期(➡更高风险)令牌中受益,即它们通过中间人攻击受到损害的机会更小。
我无法轻松决定如何从后端接收刷新令牌和访问令牌,以及将其存储在哪里。 我理解的认证过程如下。 XSS可以用cookies进行防御 我参考了许多文章,据说XSS将被cookie阻止,CSRF将被刷新令牌和访问令牌保护。 对于刷新令牌,它存储在webStorage中。 然而,为了防止XSS,在访问令牌的情况下,似乎应该使用cookie来保护它们(仅适用于Http),在刷新令牌的情况下,似乎应该将它们存
我正在使用vue.js和vuex开发一个应用程序,它使用JWT令牌对JSON API服务器进行身份验证。所以我想知道存放JWT代币的最佳做法是什么? 如果我将其存储在vuex商店中,则页面刷新后它会丢失,因此用户需要再次登录,这不是很方便。 如果我将其存储在浏览器的本地存储中,它会在下次登录之前被弃用,然后假设身份验证令牌的组件会混淆。我不知道如何处理这个问题。 感谢你对此的暗示。
我试图用oauth2和jwt为我的API添加安全性。所以目前我可以使用以下命令并获得访问令牌。curl客户端:secret@localhost:8080/oauth/token-d grant_type=password-d username=user-d password=password 显然,我不打算为每个用户调用它))我的问题是在哪里调用这个命令?我应该创建像“localhost:8080
在GitHub中生成个人访问令牌后,是否有必要将其存储在机器的本地某处? 如果是,是否有任何首选的存储方式?
以下是Spotify API的文档(我使用的是隐式授权流):https://beta . developer . Spotify . com/documentation/general/guides/authorization-guide/# Implicit-Grant-Flow 我正在尝试在Google表格中编写脚本。我专注于基本设置,但我似乎无法让访问令牌正常工作。 解决了的: 我目前收到以
如果是,是否有任何首选的存储方式?