Home >Web Front-end >JS Tutorial >How nodejs implements single sign-on Demo through jsonp

How nodejs implements single sign-on Demo through jsonp

php中世界最好的语言
php中世界最好的语言Original
2018-03-12 09:54:032472browse

This time I will bring you how nodejs implements single sign-on demo through jsonp. What are the precautions for nodejs to implement single sign-on demo through jsonp. The following is a practical case, let's take a look.

Instructions: Use redis as the session storage method
Use the dynamic js address introduced into the sso server to obtain the cookie
After the application server obtains the special identifier provided by the single-point server such as sessionId or others,
Go directly to redis to query through the identifier, or submit (through rpc) to a single server to query and obtain the login information results

Server code example

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

Application code example:

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

Modify hosts file under windows system
(usually under C:\Windows\System32\drivers\etc)
Add:

127.0.0.1 sso.com127.0.0.1 testsso.com

Browser access:

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

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Related reading:

What is the difference between python3 and JS

How to make an image upload preview component in H5

How to use s-xlsx to import and export Excel files

The above is the detailed content of How nodejs implements single sign-on Demo through jsonp. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn