14.2 基于令牌的认证

2023-12-26 00:18
文章标签 认证 令牌 14.2

本文主要是介绍14.2 基于令牌的认证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    上节我们介绍了基于http的认证, 由于客户端每次发出请求时都要发送密令, 为了避免老是发送敏感信息, 我们可以提供一种基于令牌的认证方案。

一. 修改app/models.py

class User(db.Model):#生成认证令牌def generate_auth_token(self, expiration):s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration)return s.dumps({'id': self.id})#验证认证令牌, 如果令牌可用就返回对应的用户@staticmethoddef verify_auth_token(self, token):s = Serializer(current_app.config['SECRET_KEY'])try:data = s.loads()except:return Nonereturn User.query.get(data['id'])

二. 修改app/api_1_0/authentication.py

@auth.verify_passworddef verify_password(email_or_token, password):#如果填的是token字符串if password = '':g.current_user = User.verify_auth_token(email_or_token)g.token_userd = Truereturn g.current_user is not None#如果填的是email和密码user = User.query.filter_by(email=email_or_token).first()if not user:return Falseg.current_user = userg.token_used = Falsereturn user.verify_password(password)

代码分析:

    用户访问api蓝本注册的路由时, 首先会访问@api.before_request修饰器修饰的before_request函数, 而before_request函数被修饰器@auth.login_required修饰, 所以会触发auth.verify_password认证, 就会弹出类似下面的对话框要求用户填写认证信息

   

    如果我们填写的是token字符串, 那么密码栏为空, verify_password函数验证token, 并返回结果;

    如果我们填写的是email和password, 那么verify_password函数验证email和密码, 并返回结果;

    这里我们用g.token_used变量来让视图函数区分这两种认证方法。

    因此认证函数的作用就是, 认证所有访问 api蓝本注册的路由 的用户, 如果认证通过g.current_user存储认证通过的用户, 并访问路由, 认证失败则无法访问路由。

三. 修改app/api_1_0/authentication.py

@api.route('/token')def get_token():if g.token_used:return unauthorized('Invalid credentials')return jsonify({'token': g.current_user.generate_auth_token(expiration=3600), 'expiration': 3600}

代码分析:

    如果用户访问该路由获取token, 认证通过时, g.current_user会存储认证通过的用户, 然后访问该路由, 返回由该用户id生成的token字符串, g.token_used的if判断是为了防止使用旧token生成新token。

四。 效果演示

1)访问生成token的路由

2)填写用户名密码进行认证

3)认证成功,视图函数返回生成的token字符串

4)下次访问api注册的路由时就可以填写token字符串

5)如果我们试图用旧token生成新token

6)返回错误


这篇关于14.2 基于令牌的认证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/537475

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能