0

内部ネットワーク (イントラネット、bpm など) の多くの製品へのプロキシ要求を行う単一のバックエンドを作成しようとしています。bpm Bonita の場合、すべてのユーザーが自分の資格情報を使用して、Cookie で応答するサービスにログインする必要があります。私の考えは、データベースへのログイン後にすべてのユーザーの Cookie を保存し、それをユーザーが行うすべての呼び出しに追加することでした。

関数:

        let unirest = require('unirest');
    //I try to call  it with the cookie of the last session passed in data.cookie
    unirest.post('https://bonitaurl:8443/bonita/' + data.query)
        .headers({
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'ContentType': 'application/json'
        })
        .send(data.Presult.params)
        .jar(data.cookie)//import cookie from database
        .strictSSL(false)
        .end(function (Tryresponse) {
            if (Tryresponse.statusCode != 401 && Tryresponse.statusCode != 404) {
                console.log('loggedin as : ', data.user);
                console.log(data.cookie);
                console.log(Tryresponse.statusCode);
                return callback(Tryresponse);
            }
            else if (Tryresponse.statusCode == 401 || Tryresponse.statusCode == 403) {
                console.log(Refresh cookie for user : ', data.user);
                request = unirest.post('https://bonitaurl:8443/bonita/loginservice')
                    .send({'redirect': false, 'username': data.user, 'password': data.pass})
                    .headers({
                        'Accept': 'application/json',
                        'Accept': 'application/x-www-form-urlencoded',
                        'Content-Type': 'application/x-www-form-urlencoded'
                    })
                    .strictSSL(false)
                    .jar(true)//save cookies
                    .end(function (loginresponse) {
                        if (loginresponse) {
                            //Call using previus cookies

                            // Start DB
                            let pgp = require("pg-promise")();
                            let db = pgp("postgres://DBUSER:*****@localhost:5432/MYDB");

                            //I will save tokens to database
                            db.none("update users set bpmtk = $1 where username = $2  ", [JSON.stringify(loginresponse.cookies), data.user])
                                .then(function () {
                                    console.log('updated ' + user);
                                    unirest.post('https://bonitaurl:8443/bonita/' + data.query)
                                        .headers({
                                            'Accept': 'application/json',
                                            'Content-Type': 'application/json',
                                            'ContentType': 'application/json'
                                        })
                                        .send(data.Presult.params)
                                        .jar(loginresponse.cookies)//Import cookies from the last request
                                        .strictSSL(false)
                                        .end(function (Proxyresponse) {
                                            if (Proxyresponse) {
                                                return callback(Proxyresponse);
                                            }
                                        })
                                });
                        }
                    })
            }
            else {
                console.log('Error code: : ', Tryresponse.statusCode);
                return callback(Tryresponse.statusCode);
            }
        })

コードは機能し、すべてのユーザーは最後の Cookie で正しくログインできますが、ユーザーのセッションを確認すると、最後にログインしたユーザーを指しています。これを避けるには、毎回ログインして呼び出しを実行し、ログアウトする必要があります。これはパフォーマンスにとって非常に悪いことです。何か案が ?

4

0 に答える 0