token、cookie+sessionの2つの方法を使って、身分認証を実現します.

3541 ワード

token、cookie+sessionはnodejs環境下のモジュールに基づいています.身分認証の機能を実現するために使用できます.具体的な実現過程を見てください.
tokenモジュールで実現されたアイデア:
サービス側では、ユーザの登録記録を保存する必要はなく、クライアントが自分で保存する(cookie、local)1、クライアントがユーザ名とパスワードを使用してログインを要求します.2、サービス側は要求を受けて、ユーザ名とパスワードを検証します.3、認証が成功したら、サービス側はTokenを発行します.また、このTokenをクライアント4、クライアントはTokenを受け取ったら、CookieまたはLocal Strageの中に入れます.クライアントはサービス端末にリソースを要求するたびに、サービス端末で発行されたToken 6とサービス端末で要求を受けて、クライアント要求の中にあるTokenを検証します.検証が成功すれば、クライアントに要求されたデータを返します.
//1.    
const express=require('express');
const bodyParser=require('body-parser');
const jwt=require('jsonwebtoken');
//2.     
let server=express();
//3.    
server.listen(9898,'localhost',function(){console.log('      9898...')})
//4.    
//4.1    
server.get('/login',(req,res)=>{
	//(1)               ,      
	//(2)       ,    token  
	let token=jwt.sign({
		user:req.query.user  //         ,       token  
	},
	'wang',  // token       
	{
		expiresIn:30   //   token       
		}
	)
	//(3)  token     
	res.send({
		err:0,
		msg:'    ,   token  ',
		token:token
	})
})
//5.             
server.get('/user',(req,res)=>{
	//(1)        token  ,              
	let token = req.query.token || req.body.token || req.headers.token;
	//(2)      token  
	jwt.verify(token,"wang",(err,decode)=>{ //err      ,        token
		if(!err){
			res.send({
				err:0,
				msg:'      '
			})
		}else{
			res.send('token     ')
		}
	})
})
cookie+sessionモジュールの実現の思想:
1、クライアントのユーザ名とパスワード要求登録2、サービス端末は要求を受けて、データベースに行ってユーザー名とパスワードを検証します.3、認証に成功した後、サービス端末はクッキーまたは文字をクライアントに送信します.サーバーはsession 4、クライアントが応答を受け取ったら、受信した文字をクッキー5、クライアントは、各サービス端末にリソースを要求するクッキーを自動的に6、サービス端末に要求を受けて、クッキーとセッションを検証します.検証が成功すれば、要求されたライブラリデータをクライアントに返します.
//          npm install cookie-session
//1.    
let express = require("express")
//4.  cookie-session   
let cookieSession = require("cookie-session")

//2.     
let serve=express()

//4.     ,      cookie,      session,      
serve.use(cookieSession({
	name:'mycookie',  //     cookie  
	keys:['a']  ,//    ,    ,      
	// maxAge:1000*10   //cookie     
}))

//3.    
serve.listen(6767,function(){
	console.log('      6767')
})

//4.  get     
//4.1     
serve.get('/login',function(req,res){
	//1.           ,            ,       ,         
	//2.          ,         
	//       ,   req.session          ,            ,  ,        ,         mycookie cookie,       ,        
	req.session.login='userid'
	res.send('     ,      ')
})
//4.2        
serve.get('/user',function(req,res){
	//        cookie session        ,      ,         
	let pass = req.session.login;
	if(pass){
		res.send('      ,      ')
	}else{
		res.send('          ,     ')
	}
	res.end()
})

//4.3     
serve.get('/logout',function(req,res){
	//      session    cookie,    req.session.login       underfined
	req.session.login=undefined;
	res.send('      ')
})
二つの方法は、認証の比較を実現する.
cookie+session
token
サービスでユーザ情報を保存します.

×
CSRF攻撃を避ける
×

取り付け性
一般
高さ
マルチサーバーの粘性問題
存在する
存在しません
どのようなサービス粘性の問題ですか?
アプリケーションでsessionの読み取り、書き込み、または削除操作を行うと、オペレーティングシステムのtempフォルダの下で少なくとも一回目のファイル操作が発生します.複数のサーバがあると仮定し、最初のサービスでセッションを作成します.再度要求を送信すると、この要求は他のサーバに落ちます.session情報は存在しません.「未認証」の応答が得られます.あなたが粘性sessionを通じてこの問題を解決できることを知っています.しかし、tokenによる認証では、この問題は自然に解決された.スティッキーセッションの問題はありません.サーバに送信する要求ごとに、この要求のtokenがブロックされます.