Heim > Web-Frontend > js-Tutorial > Hauptteil

So implementiert nodejs Single Sign-On Demo über jsonp

php中世界最好的语言
Freigeben: 2018-03-12 09:54:03
Original
2412 Leute haben es durchsucht

Dieses Mal zeige ich Ihnen, wie NodeJS die Single-Sign-On-Demo über JSONP implementiert. Welche Vorsichtsmaßnahmen gibt es für NodeJS, um die Single-Sign-On-Demo über JSONP zu implementieren?

Hinweis: Verwenden Sie Redis als Speichermethode für die Sitzung.
Verwenden Sie die in den SSO-Server eingegebene dynamische JS-Adresse, um das Cookie zu erhalten.
Nachdem der Anwendungsserver die vom Einzelpunkt bereitgestellte spezielle Kennung erhalten hat Server wie sessionId oder andere,
Gehen Sie direkt zu Redis, um die Kennung abzufragen, oder senden Sie sie (über RPC) an einen einzelnen Server, um die Ergebnisse der Anmeldeinformationen abzufragen und zu erhalten

Servercodebeispiel

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);
Nach dem Login kopieren

Anwendungscodebeispiel:

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);
Nach dem Login kopieren

Ändern Sie die Hosts-Datei unter Windows-System
(normalerweise unter C:WindowsSystem32driversetc)
Hinzufügen:

127.0.0.1 sso.com127.0.0.1 testsso.com
Nach dem Login kopieren

Browserzugriff:

http://sso.com:8087
http://testsso.com:8088
Nach dem Login kopieren

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Verwandte Lektüre:

Was ist der Unterschied zwischen Python3 und JS

So erstellen Sie eine Bild-Upload-Vorschaukomponente in H5

So verwenden Sie s-xlsx zum Importieren und Exportieren von Excel-Dateien

Das obige ist der detaillierte Inhalt vonSo implementiert nodejs Single Sign-On Demo über jsonp. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!