Authentification d'identité frontale et dorsale - mécanisme d'authentification de session

Prenez l'habitude d'écrire ensemble ! C'est le 20ème jour de ma participation au "Nuggets Daily New Plan · April Update Challenge", cliquez pour voir les détails de l'événement .

Authentification

  • Authentification (authentification), également appelée "authentification", "authentification"

    Par certains moyens, la confirmation de l'identité de l'utilisateur est complétée. L'authentification de l'identité peut être vue partout dans la vie quotidienne, comme la vérification des billets de train à grande vitesse, le déverrouillage du mot de passe du téléphone portable, etc. Dans le développement Web, la connexion par code de vérification du téléphone portable, la connexion par mot de passe par e-mail, etc.

  • Objet de l'authentification

    Pour confirmer l'authenticité de l'utilisateur actuel. Dans le développement de projets Internet, comment authentifier les identités des utilisateurs est un problème qui mérite d'être discuté en profondeur. Par exemple, comment pouvons-nous nous assurer que le site Web ou le client n'affichera pas par erreur les informations de l'utilisateur A sur l'utilisateur B ?

  • Authentification dans différents modes de développement

    Pour les deux modes de développement de rendu côté serveur et de séparation front-end et back-end, il existe différents schémas d'authentification.

    • Il est recommandé d'utiliser le mécanisme d'authentification de session pour le rendu côté serveur
    • Il est recommandé d'utiliser le mécanisme d'authentification JWT pour la séparation front-end et back-end

mécanisme d'authentification de session

Apatridie du protocole HTTP

L'apatridie du protocole HTTP signifie que chaque requête HTTP du client est indépendante, qu'il n'y a pas de relation directe entre plusieurs requêtes consécutives et que le serveur ne conservera pas activement l'état de chaque requête HTTP.

Par exemple : le caissier peut-il se rappeler si le client actuel est un membre VIP ?

Snip20220419_43.png

Dépassez les limites du HTTP sans état

Pour les supermarchés, afin de confirmer facilement si l'utilisateur est un VIP, le supermarché émet une carte de membre pour chaque utilisateur VIP, et l'utilisateur n'a qu'à présenter la carte VIP avant le règlement pour profiter de la réduction d'adhésion

Snip20220419_44.png

Pour le client et le serveur, l'identité du client peut également être marquée par un identifiant tel qu'une carte de membre. Par exemple, si le client 1 se connecte avec succès, le serveur renverra une identité au client 1, de sorte que le client portera cette identité dans les requêtes suivantes, et le serveur pourra déterminer que l'utilisateur s'est connecté lorsqu'il recevra cette identité. En développement web, cette identité s'appelleCookie


Que sont les cookies

  • La notion de cookies

    Cookie 是存储在用户浏览器中的一端不超过 4kb 的字符串。它由一个名称(Name)、一个值(Value)和其他几个用于控制 Cookie 有效期、安全性、适用范围的可选属性组成

  • Cookie 的特性

    • 域名独立。不同域名下的 Cookie 各自独立
    • 自动发送。每当客户端发起请求时,会自动把当前域名下所有未过期的 Cookie 一同发送到服务器
    • 过期时限。每个 Cookie 都有有效期
    • 4kb限制。Cookie 不可以超过 4kb

Cookie 在身份认证中的作用

客户端第一次请求服务器的时候,服务器通过响应头的形式,向客户端发送一个身份认证的 Cookie,客户端会自动将 Cookie 保存在浏览器中。随后,当客户端浏览器每次请求服务器的时候,浏览器会自动将身份认证相关的 Cookie 通过请求头的形式发送给服务器,服务器即可验明客户端的身份

Snip20220419_45.png


Cookie 不具有安全性

由于 Cookie 是存储在浏览器中的,而且浏览器也提供了读写 Cookie 的 API,因此,Cookie 很容易被伪造,不具有安全性,因此不建议服务器将重要的隐私数据通过 Cookie 的形式发送给浏览器


提高身份认证的安全性

为了防止客户端伪造会员卡,收银员在拿到客户出示的会员卡之后,可以在收银机上进行刷卡认证,只有收银机确认存在的会员卡,才能被正常使用。这种 “会员卡 + 刷卡认证” 的设计理念,就是 session 认证机制的精髓

Snip20220420_48.png


session 的工作原理

Snip20220420_52.png


在 Express 中使用 session 认证

安装 express-session 中间件

在 Express 项目中,只需要安装 express-session 中间件,即可在项目中使用 session 认证

npm install express-session
复制代码

配置 express-session 中间件

express-session 中间件安装成功后,需要通过 app.user() 来注册 session 中间件

// 1、导入 session 中间件
const session = require('express-session')

// 2、配置 session 中间件
app.use(
    session({
        // secret 属性的值可以为任意字符串
        secret: 'studyNode',
        // 固定写法
        resave: false,
        // 固定写法
        saveUninitialized: true
    })
)
复制代码

向 session 中存数据

Une fois le middleware de session express correctement configuré, vous pouvez accéder à l'objet de session et l'utiliser req.sessionpour stocker les informations utilisateur clés.

app.post('/api/login', (req, res) => {

    // 判断用户提交的登录信息是否正确
    if (req.body.username !== 'admin' || req.body.password !== '000000') {
        return res.send({ status: 1, msg: '登录失败' })
    }

    req.session.user = req.body //将用户信息存储到 session 中
    req.session.islogin = true //将用户登录状态存到 session 中
    
    res.send({ status: 0, msg: '登录成功' })

})

复制代码

Obtenir les données de la session

Obtenir les données précédemment stockées de l' req.sessionobjet

// 获取用户姓名的接口
app.get('/api/username', (req, res) => {

    // 请从 Session 中获取用户的名称,响应给客户端
    
    //判断用户是否登录
    if(req.session.islogin){
        return res.send({
        status: 1,
        meassage: 'fail'
    })
    
    
    res.send({
        status: 0,
        msg:'success',
        username:req.session.user.username
    })
})                                                      
复制代码

séance claire

Appelez la req.session.destory()fonction pour effacer les informations de session enregistrées par le serveur

app.post('/api/logout', (req, res) => {

    // 清空当前用户端对应的 Session 信息
    req.session.destroy()
    req.send({
        status:0,
        msg:'退出登录成功'
    })
})
复制代码

Guess you like

Origin juejin.im/post/7088693568860061726