Maison  >  Article  >  interface Web  >  Comment nodejs implémente la démonstration d'authentification unique via jsonp

Comment nodejs implémente la démonstration d'authentification unique via jsonp

php中世界最好的语言
php中世界最好的语言original
2018-03-12 09:54:032366parcourir

Cette fois, je vais vous montrer comment nodejs implémente une démo d'authentification unique via jsonp. Quelles sont les précautions à prendre par nodejs pour implémenter une démo d'authentification unique via jsonp ? Voici un cas pratique, jetons un coup d'œil.

Remarque : utilisez redis comme méthode de stockage de session
Utilisez l'adresse js dynamique introduite dans le serveur sso pour obtenir le cookie
Une fois que le serveur d'applications a obtenu l'identifiant spécial fourni par le point unique serveur tel que sessionId ou autres,
Allez directement sur redis pour interroger via l'identifiant, ou soumettez (via rpc) à un seul serveur pour interroger et obtenir les résultats des informations de connexion

Exemple de code de serveur

const Koa = require('koa');const Router = require('koa-router');const bodyParser = require('koa-bodyparser');const app = new Koa(); 
const router = new Router(); 
app.use(bodyParser());//====session s=====var session = require('koa-generic-session');var redisStore = require('koa-redis');
app.keys = ['keys', 'c29tZSBzZWNyZXQgaHVycg'];
app.use(session({//配置session
    store: redisStore({}),    cookie: {        path: '/',        httpOnly: true,        maxAge: 1 * 60 * 60 * 1000,        rewrite: true,        signed: true
    }
}));//====session e=====router.get('/login', function* (next) {//登录页面 
    this.session=null;//删除cookie
    this.body=`
    <form action="/login" method="post">
        <p>用户名: <input type="text" name="name" /></p>
        <p>密码: <input type="text" name="pwd" /></p>
        <input type="submit" value="提交" />
    </form>   
    `;
}).post(&#39;/login&#39;, function* (next) {//提交登录数据 
    var sinfo = JSON.stringify(this.request.body);//<==获取post数据
    this.session.sinfo =sinfo;//<===存入session,模拟登录成功
    this.redirect(&#39;/&#39;);//<===跳转向到你要的页面});
router.get(&#39;/&#39;, function* (next) {    if(this.session&&this.session.sinfo){//判断是否有cookie
        this.body=`已登录 `;
    }else{        this.redirect(&#39;/login&#39;);//<===跳转向到你要的页面    
    }
});
router.get(&#39;/sso.js&#39;, function* (next) { //动态js
    if(this.session&&this.session.sinfo&&this.session.sinfo.length>0){        this.body=`var kosid=&#39;${this.sessionId}&#39;;`;//示例写入sessionId,也就是存入到redis的key
    }else{         this.body=`window.location.href="http://sso.com/login";`;
    }
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(8087);

Exemple de code d'application :

const Koa = require(&#39;koa&#39;);const Router = require(&#39;koa-router&#39;);const bodyParser = require(&#39;koa-bodyparser&#39;);const app = new Koa(); 
const router = new Router(); 
app.use(bodyParser());//====session s=====可以直接用普通session app.keys = [&#39;c29tZSBzZWNyZXQgaHVycg%3D%3D&#39;];var CONFIG = {
    key: &#39;koa:sess&#39;, /** (string) cookie key (default is koa:sess) */
    maxAge: 2000, /** (number) maxAge in ms (default is 1 days) */
    overwrite: true, /** (boolean) can overwrite or not (default true) */
    httpOnly: true, /** (boolean) httpOnly or not (default true) */
    signed: true, /** (boolean) signed or not (default true) */};
app.use(session(CONFIG, app));//====session e=====/*
//====session s===== 或者一样吧
var session = require(&#39;koa-generic-session&#39;);
var redisStore = require(&#39;koa-redis&#39;);
app.keys = [&#39;keys&#39;, &#39;c29tZSBzZWNyZXQgaHVycg&#39;];
app.use(session({//配置session
    store: redisStore({}),
    cookie: {
        path: &#39;/&#39;,
        httpOnly: true,
        maxAge: 1 * 60 * 60 * 1000,
        rewrite: true,
        signed: true
    }
}));
//====session e=====
*/router.get(&#39;/&#39;, function* (next) {
     this.body=`
        <script type="text/javascript" src="http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
        <script type="text/javascript" src="http://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
        <script src=&#39;http://sso.com:8087/sso.js&#39;></script>
        <script>
            $.cookie("sid",kosid);            if(kosid){
                document.write(&#39;key:&#39;,kosid);
            }else{
                document.write(&#39;未登录&#39;);                
            }
            console.log("this",document.cookie);
        </script>`;    return;
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(8088);

Modifier le fichier hosts sous le système Windows
(généralement sous C:WindowsSystem32driversetc)
Ajouter :

127.0.0.1 sso.com127.0.0.1 testsso.com

Accès par navigateur :

http://sso.com:8087
http://testsso.com:8088

Je pense que vous maîtrisez la méthode après avoir lu le cas présenté dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture connexe :

Quelle est la différence entre python3 et JS

Comment créer un composant d'aperçu de téléchargement d'image dans H5

Comment utiliser s-xlsx pour importer et exporter des fichiers Excel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn