problème strong> J'ai une API créé que lorsque je reçois une demande, il renvoie une gamme de données. L'URL de l'API doit être utilisée par une équipe de développement externe. P> Ce que je veux réaliser, c'est que seules elles sont celles qui peuvent accéder au point final Il y aura une façon que l'équipe avec la clé API puisse accéder au point final? Et si possible, comment pourrait-il être mis en œuvre? P> J'apprécie votre aide! P> / API / VERILY CODE> p>
app.get('/api/verily', (req, res) => {
new sql.ConnectionPool(config)
.connect()
.then((pool) => {
return pool
.request()
.query(
"QUERY REMOVED... DESMOSTRATION ONLY"
);
})
.then((result) => {
Object.keys(result.recordset[0]).forEach(function (item) {
const ft = JSON.parse(result.recordset[0][item]);
res.setHeader('Access-Control-Allow-Origin', '*');
res.status(200).json(ft);
});
})
.catch((err) => {
res.status(500).send({ message: err });
});
sql.close();
});
3 Réponses :
Vous pouvez obtenir la même chose en mettant en œuvre le middleware. Vous pouvez définir une fonction middleware qui vérifiera si l'API envoyé via l'en-tête ou les paramètres de la demande est authentique ou non et si tout va bien, vous pouvez revenir en plus, vous pouvez ajouter fidèle à vous req.body.isauthentic, une fois que le middleware revient à l'aide de l'appel () à l'appel Route, vous pouvez vérifier si elle est retournée true ou false dans le req.body.isauthentic et continuez!
Exemple d'échantillon: P>
var express = require('express'); var app = express(); app.get('/', middlware, function(req, res, next) { if (req.body.isAuthentic) { res.send('Hello World!'); } }); function middlware(req, res, next) { // check whether api is authentic // if authentic then add req.body.isAuthentic = true; next(); }; var server = app.listen(8000, function () { var host = server.address().address var port = server.address().port console.log("Example app listening at http://%s:%s", host, port) })
un exemple qui puisse suivre?
Voir la réponse mise à jour, j'ai ajouté l'exemple exemple.
Le problème est que je ne vais pas gérer les utilisateurs, l'idée serait que lorsque l'équipe de développement externe de l'autre société utilise l'URL de l'API, ce sont les seuls à pouvoir utiliser le noeud final.
Vous pouvez écrire un middleware comme -
const verify = require("import/above/middleware/verifyToken.js") app.get('/api/verily', auth, (req, res) => { new sql.ConnectionPool(config) .connect() .then((pool) => { return pool .request() .query( "QUERY REMOVED... DESMOSTRATION ONLY" ); }) .then((result) => { Object.keys(result.recordset[0]).forEach(function (item) { const ft = JSON.parse(result.recordset[0][item]); res.setHeader('Access-Control-Allow-Origin', '*'); res.status(200).json(ft); }); }) .catch((err) => { res.status(500).send({ message: err }); }); sql.close(); });
J'apprécie votre solution mais ce n'est pas ce que je cherche vraiment, car dans ce cas, vous devriez voir un utilisateur authentifié. Mais je ne cherche pas une solution d'utilisateur authentifiant. Ce que je veux faire, c'est que lorsque l'équipe de développement demande le point final, ils sont les seuls à accéder. Pour cela, je pensais à une mise en œuvre lorsque l'équipe de développement a apporté une demande à l'API, invité à entrer une clé API avant la demande.
S'il vous plaît voir mon commentaire sur votre op. Que voulez-vous dire quand vous dites "lorsque l'équipe de développement a apporté une demande à l'API, invité à entrer une clé API avant la demande"? Cela semble être un détail important qui devrait être expliqué dans la question elle-même.
Si vous avez plus d'un noeud final à protéger, alors middleware est probablement la voie à suivre. Si tout ce que vous vous souciez vraiment de protéger est la protection d'un point final unique avec une clé d'API fixe, et vos consommateurs passeront dans cette clé en tant que paramètre de requête (par exemple, code> code>), vous pouvez:
const MY_API_KEY = "some-secret-value"; app.get('/api/verily', (req, res) => { if (req.query.key !== MY_API_KEY) { res.status(401).send('Unauthorized'); } else { // HANDLE APPROVED REQUEST HERE } });
Avez-vous regardé OAuth2? C'est probablement l'architecture la plus courante d'implémenter une authentification sur les API.
Lire vos commentaires @chris Michael, il semble que vous n'ayez pas expliqué clairement le flux de travail. Il est difficile de répondre à votre question sans comprendre ce que vous voulez faire. Par exemple-- Comment l'équipe extérieure obtient-elle la clé API? Est-ce corrigé ou allez-vous le changer?
Non, ce n'est pas implémenté. C'est l'idée. L'idée serait de savoir comment je peux mettre en œuvre afin que le Dev passe un param avec la valeur de la clé API sur le point final '/ API / VERRY'