我编写授权代码。单击登录按钮后,我创建一个新标题
res.header('Authorization', token)
Run Code Online (Sandbox Code Playgroud)
管理员登录路由器:
router.post('/admin_login', async (req, res) => {
const adminDB = data.admins;
const admin = adminDB.find(admin => req.body.email === admin.email)
if (!admin) return res.status(400).send('Email in not found!')
if (admin.password !== req.body.password) return res.status(400).send('Invalid password')
const token = jwt.sign({ admin }, 'the_secret_key')
res.header('Authorization', token)
res.redirect('/admin')
})
Run Code Online (Sandbox Code Playgroud)
在管理路由器中登录后,我不会收到授权标头,但我不会收到它。我在中看到授权标头
验证码:
const jwt = require('jsonwebtoken')
module.exports = (req, res, next) => {
const token = req.header('Authorization')
console.log(token)
if (!token) return res.status(401).send('Access Denied')
try {
const verified = jwt.verify(token, 'the_secret_key')
req.admin = verified …Run Code Online (Sandbox Code Playgroud) 我有一个 NestJS 后端,由 JWT 保护。我想知道存储实际用户或将其传递给我的服务的最佳方式是什么?
我有一个 JwtAuthGuard
@Injectable()
export class JwtAuthGuard extends AuthGuard( 'jwt' ) {
canActivate(context: ExecutionContext) {
return super.canActivate( context );
}
handleRequest(err, user, info) {
if ( err || !user ) {
throw err || new UnauthorizedException();
}
return user;
}
}
Run Code Online (Sandbox Code Playgroud)
我的实际用户 ID 位于 handleRequest 中的 user var 中,但我不知道在哪里“存储”它以便能够在某些模块中访问它。有人可以帮助我吗?
谢谢
通常我们通过 JWT(访问和刷新令牌)保护移动 API。但我们刚刚面临这样的情况:即使 JWT 令牌过期,我们的应用程序也必须 100% 可供用户使用。(这是一些紧急的事情)。用户/应用程序不能等待重新登录并获取新的 JWT 代码。
问题:长时间(...永远)保护 API 调用而不从后端获取新令牌的最佳方法是什么。当每个请求使用每个请求的当前日期时间附件对移动应用程序进行共享密钥加密时,我看到了几次变体...但我不确定这是一个好的解决方案,至少它会存在性能问题(加密的操作时间) /解密请求)。
我的问题的关键是PassportJS 似乎正在验证 JWT,当当前时间超过 exp 参数时,该 JWT 应该是无效的。
我已经提供了相关的代码片段以及我认为应该发生的事情的解释(尽管显然不是!!)
// In server.js
// ...
const passport = require("passport");
// ...
require("./config/passport")(passport);
app.use(passport.initialize());
// ...
Run Code Online (Sandbox Code Playgroud)
// In token.js (used to issue JWT)
const jsonwebtoken = require("jsonwebtoken");
// ...
const issueJWT = (user) => {
const _id = user._id;
const expiresIn = 30000; // 30s for testing purposes
const payload = {
sub: _id,
iat: Date.now(),
};
const signedToken = jsonwebtoken.sign(payload, PRIV_KEY, {
expiresIn: expiresIn,
algorithm: "RS256",
});
return …Run Code Online (Sandbox Code Playgroud) 如何使用在每个套接字事件而不是每个连接上触发的身份验证中间件?
我想将其用于反应节点应用程序中的会话管理。用户登录后,我将发送 JWT 令牌,并在数据库的会话表中创建一个新行。但是在他登录后,我想通过使用提到的中间件检查他是否是同一个人,以应对以下每个事件。前端客户端会通过cookies发送token。
我的登录和注销工作是通过 socket.io 而不是通过 HTTP 进行的。
我在 .Net Core 中有一个“身份验证服务”应用程序,它通过质询请求进行身份验证,然后使用令牌重定向回客户端应用程序。
[AllowAnonymous]
[HttpGet("Login")]
public IActionResult Login()
{
return Challenge(new AuthenticationProperties
{
RedirectUri = returnUrlQs
}, OpenIdConnectDefaults.AuthenticationScheme);
}
Run Code Online (Sandbox Code Playgroud)
目前,我使用 OpenId Connect 事件通过 HTTP cookie 传输令牌options.Events.OnAuthorizationCodeReceived。然而 4kb cookie 长度太小,所以我想尝试将其移至授权标头。
我尝试设置响应标头,但另一端没有收到它;在客户端应用程序上。
这有可能实现吗?
谢谢你的帮助!
我已经在带有 jwt 身份验证的节点中开发了一个简单的烘焙服务器,但我仍然有一个问题:用户正确登录并将令牌保存在客户端后,服务器是否应该在每个用户请求时验证令牌?例如,当访问/profile路由(将用户带到个人资料页面)时,或者当用户通过向路由发送发布请求来创建问题时,/posts/create我是否应该使用该方法jwt.verify(...)来检查令牌是否每次都正确?发送 jwt 访问令牌而不是刷新令牌是否正确,或者这是一个不好的做法?
我有一个这样的令牌:
hereeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcGVyYWRvciI6eyJpZCI6NzAsIm5vbWUiOiJERUlWSVRJIiwidXN1YXJpbyI6IkRFSVZJVEkifSwiaWF0IjoxNjI5ODEyNDA1fQ.JqzQnFSbG6gFsnlJu3-bezxZ_N5e5FEzc9QvpRGu0u4
Run Code Online (Sandbox Code Playgroud)
把它藏起来:
alg: "HS256",
typ: "JWT"
}.
operador: {
id: 20,
nome: "JOAO",
usuario: "JOAO"
},
iat: 1629812405
}
Run Code Online (Sandbox Code Playgroud)
问题是如何在 android kotlin 上获取仅用户 ID 以在某些任务中使用?
我的问题是我想检查数据库中的登录令牌是否无效(更改密码后)。但是,JWTStrategy 中的验证函数只能访问 JWT 的有效负载,而不能访问令牌。我想知道是否有办法可以从此类或 JWTAuthGuard 的请求中获取 JWT 令牌。谢谢!
async validate(payload: LoginPayload) {
const { email, firstName, lastName, sub } = payload;
return {
id: sub,
email,
firstName,
lastName,
};
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Next.js (11.1.2) + NextAuth (^4.0.5) + Strapi(3.6.8)进行项目。
我正在使用 Next Auth 凭据提供程序,它工作正常。但我需要使用 访问一些用户信息session,因此我尝试使用jwt和session回调来执行此操作。
当我在内部记录来自 Strapi 的响应时authorize(),我收到了{ jwt:{}, user:{} },所以没问题。
//[...nextauth.js]
async authorize(credentials, req) {
try {
const { data } = await axios.post(process.env.CREDENTIALS_AUTH_URL, credentials)
if (data) {
//console.log('data: ', data) //this is ok
return data;
}
else {
return null;
}
} catch (e) {
return null;
}
},
Run Code Online (Sandbox Code Playgroud)
但是,在jwt回调中,当我登录时token,我得到一个奇怪的对象{token:{token:{token:{...}}}:
// [...nextauth.js] callback:{ jwt: …Run Code Online (Sandbox Code Playgroud) jwt ×10
javascript ×4
node.js ×4
express ×2
nestjs ×2
android ×1
api ×1
asp.net-core ×1
c# ×1
encryption ×1
key ×1
kotlin ×1
middleware ×1
next-auth ×1
next.js ×1
passport-jwt ×1
passport.js ×1
reactjs ×1
security ×1
socket.io ×1
strapi ×1
token ×1