Tag: jwt

jsonnetworking令牌,passport-jwt及其validationfunction

我最近在做jsonnetworking令牌的研究。 从我所收集的资料来看,它的一大优势就是它的无国籍。 一切你需要authentication的用户来与请求,因此你不需要“击中每个请求的数据库”,许多文章说。 但是,如果我没有弄错,那么passport-jwt的文档就是这么做的,他们在每个请求中都打了数据库。 也就是说,对于每个需要通行证authentication的请求。 passport.use(new JwtStrategy(opts, function(jwt_payload, done) { //this is a database call User.findOne({id: jwt_payload.sub}, function(err, user) { if (err) { return done(err, false); } if (user) { done(null, user); } else { done(null, false); // or you could create a new account } }); })); 我的印象是,当这个函数被调用的时候, 令牌已经被validation ,否则这个函数将不会被调用,并且用户被401 unauthorized为401 unauthorized 。 那为什么要检查用户的数据库? […]

Angular JWT Profile用户(获得JSON领域)

我有一个gettProfile()方法,其中包括以下代码: gettProfile(){ var headers = new Headers(); this.loadToken(); headers.append('Authorization', this.authToken); headers.append('Content-Type','application/json'); let options = new RequestOptions({headers: headers}); return this.http.get('http://localhost:3000/api/profile', options) .map(res => res.json()); //res.json() localStorage.getItem('students') } 在这段代码中,当我写console.log(this.authToken); 它显示正确的JWT令牌。 但是,当我将这些数据传递给我的ProfileComponent它说: 错误TypeError:无法读取未定义的属性“名称” Profile.component.ts代码如下: export class ProfileComponent implements OnInit { students: Object; constructor(private authService:AuthService, private router:Router) { } ngOnInit() { this.authService.gettProfile().subscribe(profile => { this.students= profile.students; }, err => […]

nodejs和angular度的应用程序发送401未经授权和200 OK与智威汤逊

当我点击我的表单上的注册,从我可以理解的angular度是设置url到/configuration文件(受保护的路由),然后节点服务器可以授权JWT并发送200 OK。 我不知道如何防止这一点。 即使我在本地存储令牌,受保护的路由返回和未经授权的错误。 所以,即使发送200 OK响应,如果我重新加载/ profile路由,它仍然会得到一个401。 路线: const path = require('path'); const Company = require('./models/app'); const User = require('./models/users'); const jwt = require('express-jwt'); let auth = jwt({ secret: process.env.CONFIG_SR, requestProperty: 'payload' }); module.exports = function(app , passport) { function profileCheck(req , res , next) { if(!req.payload._id) { res.status(401).json({ "message" : "UnauthorizedError: private profile" }); […]

在将连接升级到WebSocket之前,通过JWT对用户进行身份validation

我使用这个库的服务器上使用节点v8.6.0。 我不会使用Socket.io。 我希望用户通过GET请求发送(即通过自定义头)一个JWT,然后这个请求会被拒绝(他们没有被授权),并且阻止一个websocket被build立,或者在他们发送一个有效的智威汤逊,我想GET请求被升级到一个websocket。 axios.get('http://localhost:3001/upgrade', { headers: { Authorization: 'bearer jwtGoesHere', Upgrade: 'websocket', Connection: 'Upgrade', 'Sec-WebSocket-Key': 'dGhlIHNhbXBsZSBub25jZQ==', 'Sec-WebSocket-Version': 13 } }) 但是,没有办法发送自定义标题。 如果我尝试发送所需的标题升级到websocket,我得到一个错误: Refused to set unsafe header 。 环顾networking,我发现当尝试build立websocket连接时,有两种方法可以发送某种信息: 这个和这个 。 然而,他们对我或者至less是非标准的解决scheme似乎有点不好意思(通过这种方式发送智威汤逊可以吗?)。 目前,这就是我的代码在服务器上的样子(使用TypeScript): const webSockets: any = {}; const webSocketServer: any = new WebSocket.Server({ noServer: true }); server.on('upgrade', (request: any, socket: any, head: any) => […]

是一个服务帐户在node.js中查询google bigquery的正确凭据?

我在Google API Console中创build了一个服务帐户,下载了.p12文件,现在我正在尝试使用https://github.com/hokaccha/node-jwt-simple来为令牌签名。 在哪里/如何获得用HS256签名的“秘密”?

有没有办法使用express-jwt在nodejs中的无保护​​端点访问jwt用户信息?

我正在使用express-jwt来保护我的端点,但是我希望一个不受保护的端点在用户login时显示一些额外的信息。所以我想知道是否有方法在无保护的端点中访问这样的用户信息? 代码如下所示: // unprotected endpoint router.get('/:productId', function(req, res) { // some ways to get user info?? if (req.user.userId) { // add some extra fields into returning_data // something like purchase history } res.json({data: returning_data}) } 或者如果有另外一种方法来实现呢?

如何向客户端发送Facebooklogin后创build的JSON Web Token?

我试图find一种方法来发送在服务器端创build的JSON Web令牌到客户端,以便客户端可以将其存储在HTML5本地存储。 具体来说,我的应用程序使用Passport进行身份validation,使用NodeJS / ExpressJS构build,有两种用户:本地用户和Facebook用户。 当本地用户用他们的用户名和密码填写login表单时,客户机要求服务器进行authentication,服务器向客户机发送JWT,然后存储在本地存储器中。 $.ajax({ url: "/authenticate", type: 'POST', data: user, dataType: "json", success: function(auth){ localStorage.setItem("token", auth.token); window.location.href = '/welcome.html'; }, failure: function(errMsg) { alert("falure"); window.location.href = '/login.html'; } }); 然后,用户被redirect到一个Welcome页面,该页面在本地存储器中查找以查找令牌,以从数据库中请求一些数据。 $.ajax({ url: "/protectedEndpoint", type: 'GET', dataType: 'json', beforeSend: function (xhr){ xhr.setRequestHeader('Authorization', localStorage.token); }, success: function (data) { … }, error: function (e) […]

无需身份validation,使用jwt保护api密钥

有没有什么办法可以通过jwt或其他任何方法来保护api响应,而不需要身份validation(login页面),这样只有主站点才能访问api。 我在google上看到的所有方法和教程都基于jwt的login系统。 作为一个例子,如果我有像restapi: router.get('/api/posts', (req, res) => { var body = … // get some via database res.json(body); }) 然后我只想通过我的网站消费这个: example.com 。 而最重要的是没有身份validation(login系统)

用于Firebase Admin SDK的Node.js身份validation服务器 – JWTvalidation问题

我正在开发一个项目,我们将在微服务架构中使用不同的服务,同时我们也希望使用一些Firebase服务。 我正在开发一个auth服务器,这个服务器将用于在Firebase以及其他API项目中使用自定义JWT。 我们希望使用Firebase Auth SDK轻松地与FB,Google,Twitter等进行整合,但是我们需要用更多的数据来丰富用户的令牌。 因此,我的思考过程是创build一个使用Firebase Admin SDK的Node.JS auth服务器来执行此操作。 stream程如下: 用户使用客户端上的collections提供程序login 如果login成功,用户将从Firebase收到JWT。 这被发送到auth服务器进行validation 如果auth服务器可以使用admin SDKvalidation令牌,则创build一个新的自定义令牌,并添加更多数据,然后将此新自定义令牌返回给客户端 让客户端使用新的自定义令牌重新进行身份validation,并将其用于与Firebase以及我们的其他API项目(主要在.NET Core中)进行通信。 步骤1-3工作正常。 尝试validation其他服务上的自定义令牌时出现问题 。 TL; DR :有两个问题: 在validation使用Firebase Node.JS Admin SDK发布的自定义令牌时,我应该使用什么作为公钥? 从Google公开的JWK中提取的关键字,还是从用于签名的私钥中提取的密钥? 在JWK方法的情况下,我应该如何构build一个kid头自定义令牌? 首先,我怀疑validation它的正确方法。 (请原谅,我没有那么有经验的创buildOAuthstream。)使用的algorithm是RS256,所以我应该能够使用公钥validation令牌。 正如我所看到的,有两种方法来获得这个关键: 从私钥中提取公钥并使用它进行validation。 我可以在auth服务器上的testingterminal上成功地进行validation,但是我觉得这是不正确的做法 另一种更正确的方法是使用令牌中的值在我的项目的Google的“/.well-known/openid-configuration/”端点上查找JWK,即 https://securetoken.google.com/[PROJECT ID] /。well-known / openid-configuration 检索正确的kid (密钥ID)的指数和模数,并从这些中创build公钥。 从admin SDK生成的令牌 admin.auth().createCustomToken(uid, additionalClaims).then(function(customToken) 一些自定义声明看起来像这样: 标题: { "alg": "RS256", "typ": "JWT" } 有效载荷: […]

angular$ http头不工作

我的客户端是这样的: $http( { method: 'GET', url: myConfig.serverUrl + '/getUserId', data: '', headers: { 'Authorization' : '21321313'}, }); 服务器端在Node js中表示: app.use(function (req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type, Authorization'); next(); }); 但请求不设置授权值 OPTIONS /getUserId HTTP/1.1. Host: xxxxx. Connection: keep-alive. Pragma: no-cache. Cache-Control: no-cache. Access-Control-Request-Method: GET. Origin: http://localhost:9000. User-Agent: Mozilla/5.0 (Windows […]