【发布时间】:2019-11-06 00:19:06
【问题描述】:
我使用 json Web 令牌保护了我的 api。如何将其连接到我的 Angular 应用程序。应用程序中将没有登录和注册。
我对 Google、youtube 和 stackoverflow 进行了大量研究。但我从来没有找到我想要的结果。
我只是想向进入网站的人展示数据。我不希望网站以外的任何人访问 Json 文件。
这是我的 express.js
const app = require('express')()
const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const fs = require('fs')
const jwt = require('jsonwebtoken')
const PORT = 3002
app.use(cors())
app.use(bodyParser.json())
app.get('/', (req, res) => {
res.json({message: 'Api'})
})
app.post('/api/login',(req, res)=> {
const user = { id: 3 }
const token = jwt.sign({ user }, 'our_key')
res.json({
token: token
})
})
app.get('/api/protected', ensureToken,(req, res)=> {
jwt.verify(req.token, 'our_key',function (err, data) {
if (err) {
res.sendStatus(403)
} else {
fs.readFile('data.json','utf-8',(err,data)=>{
res.setHeader("Content-Type", "application/json; charset=utf-8")
data = JSON.parse(data)
console.log(data)
res.end(JSON.stringify(data,null,4))
})
}
})
})
function ensureToken(req, res, next) {
const bearerHeader = req.headers["authorization"]
if (typeof bearerHeader !== 'undefined') {
const bearer = bearerHeader.split(" ")
const bearerToken = bearer[1]
req.token = bearerToken
next()
} else {
res.sendStatus(403)
}
}
app.listen(PORT, function(){
console.log('Server http://localhost:'+ PORT + ' OK')
})
无论 angular 和 jwt 是通过登录/注册系统连接的。没有这个我们能做到吗?
【问题讨论】:
-
在我看来,你能做的是一个绝对的反安全模式。您可以手动生成一个长寿命令牌,并使用拦截器将这个存储的令牌与 http 请求一起传递。但是您应该考虑一些安全机制来对用户进行身份验证。也许您应该更深入地解释整个事情的目的,以便更接近地解决您的特定问题。
-
@MarcHägele 我编辑了我的问题。我只是想要一些简单的东西。
-
您可以使用 angular.io/api/common/http/HttpInterceptor 将令牌添加到您的请求中,它会拦截所有传出请求并可以根据需要修改它们,如果您想要一些简单但不安全的东西,您可以在那里添加令牌但无需身份验证有人可以获取该令牌并在您的页面之外使用它
标签: node.js angular rest express jwt