0
votes

Comment authentifier une méthode Obtenir la demande avec noeud / express

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 / API / VERILY CODE> p>

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>

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 commentaires

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'


3 Réponses :


0
votes

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)  
})


3 commentaires

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.



0
votes

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();
});


2 commentaires

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.



0
votes

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
  }
});


0 commentaires