WebApi后端框架Token身份认证,Api接口Token验证


  WebApi后端框架Token身份认证,Api接口Token验证

WebApi后端框架Token身份认证,Api接口Token验证
 
 

令牌概述(Token)

 
 
在以用户账号体系作为安全认证的信息系统中,对用户身份的鉴定是非常重要的事情。
 
令牌机制是软件系统安全体系中非常重要的部分,在计算机身份认证中是令牌的意思,一般作为邀请、登录以及安全认证使用。Token其实说的通俗点就是“暗号”,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。
 
随着互联网行业快速的发展逐渐的演变成了前后端分离,若项目中需要做登录的话,那么token成为前后端唯一的一个凭证。Token最大的特点是系统临时分配的一组数据,可以设定过期时间,可以追踪令牌使用过程,可以通过令牌控制用户禁止或允许使用业务系统。
 
随着移动互联网时代到来,客户端的类型越来越多,逐渐出现了一个服务器对应N个客户端的格局。
 

WebApi服务端与客户端应用

 
 
下图是CSFramework.WebApi开发框架的前后端应用场景。
 
CSFramework.WebApi服务端开发框架应用
 
不同的客户端产生了不同的用户使用场景,有如下几种常用场景:
 
1. 不同的环境安全威胁;
 
2. 不同的会话生存周期;
 
3. 不同的用户权限控制体系;
 
4. 不同级别的接口调用方式;
 
综上所述,它们的身份认证方式也存在一定的区别,本文将使用一定的篇幅对这些场景进行一些分析和梳理工作。
 

 

Token机制适用的场景

 
 
在软件设计与开发方面,下面总结了几种应用场景:
 
1. 用户在Winform系统,如C/S架构的客户端登录系统,使用系统服务;
 
2. 用户在web浏览器端登录系统,使用系统服务;
 
3. 用户在手机端(Android/iOS)登录系统,使用系统服务;
 
4. 用户使用开放接口登录系统,调用系统服务;
 
5. 用户在PC处理登录状态时通过手机扫码授权手机登录(使用得比较少);
 
6. 用户在手机处理登录状态进通过手机扫码授权PC进行登录(比较常见);
 

 

Token类别

 
通过对场景的细分,得到如下不同的认证token类别:
 
1.原始账号密码类别
 
2.用户名和密码
 
3.API应用ID/KEY
 
4.会话ID类别
 
5.浏览器端token
 
6.移动端token
 
7.API应用token
 
8.接口调用类别
 
9.接口访问token
 
10.身份授权类别
 
11.PC和移动端相互授权的token
 

Token的安全性和隐私性

 
Token 不容易被窃取和盗用(Token动态生成并通过对传送频率控制)
Token 即使被窃取,产生的影响也是可控的(通过对有效时间控制、用户控制)
 
 
关于隐私及隐私破坏后的后果,有如下的基本结论:
 
1. 曝光频率高的容易被截获;
 
2. 生存周期长的被截获后对系统安全产生非常大的影响,更严重和不容易察觉;
 
 
应遵守如下原则杜绝Token被泄露和窃取:
 
1. 变化成本高的token不要轻易变化;
2. 不轻易变化的token要减少曝光频率(网络传输次数);
3. 曝光频率高的token的生存周期要尽量短;
 

Token量化指标及分类

 

贴图图片-WebApi后端框架Token令牌体系架构

 
 
备注: 
 
user_name/password 与 api_key/secret_key 是等价的效果。
 
user_name/password用于内部系统登录。
api_key/secret_key用于WebApi架构下的开发者账号和密码。
 

 

Token层级关系

 
参考上面的分类表,很容易对这些不同用途的token进行分层,主要分为以下4层:
 
密码层:最传统的用户和系统之间约定的数字身份认证方式。
 
会话层:用户登录后的会话生命周期的会话认证。
 
调用层:用户在会话期间对应用程序接口的调用认证。
 
应用层:用户获取了接口访问调用权限后的一些场景或者身份认证应用。
 
Token的分层图如下:
 

贴图图片-WebApi后端框架Token令牌体系架构1

 
 
在多客户端的软件系统里,Token的产生及应用的内在联系如下:
 
1. 用户输入用户名和用户口令进行一次性认证;
2. 在不同的终端里面生成拥有不同生命周期的会话token;
3. 客户端会话token从服务端交换生命周期短但曝光 频繁 的接口访问token;
4. 会话token可以生成和刷新延长 access_token 的生存时间;
5. access_token可以生成生存周期最短的用于授权的二维码的token;
 
 
密码层:账号密码 (user_name/password)
 
账号/密码是指注册用户名和密码、应用程序的api_key/secret_key。
 
它们的特点有:
 
1. 用户自己为了方便记忆,会设置有一定含义的账号和密码。
 
2. 不常修改,账号密码对用户有特别含义,一般没有特殊情况不会愿意修改。 而api_key/secret_key则会写在应用程序中,修改会意味着重新发布上线的成本
 
3. 一旦泄露影响深远,正因为不常修改,只要泄露了基本相当于用户的网络身份被泄露,而且只要没被察觉这种身份盗用就会一直存在,所以在认证系统中应该尽量减少传输的机会,避免泄露。
 
 
回话层:客户端会话token
 
充当着session的角色,不同的客户端有不同的生命周期。
 
用户使用账号和密码登录系统,换取会话token。
 
Web平台的Token生存周期短。由于Web登录环境一般很可能是公共环境,被他人盗取的风险值较大。Web平台的客户端主要是指网页,容易被破解源码。
 
移动端生存周期长。移动端平台是个人用户极其私密的平台,它人接触的机会不大。移动端如APP,软件是可以加壳保护源码,不易被破解,因此不易被泄露。
 
 
调用层:接口存取access_token
 
 
access_token是指服务端应用程序api接口访问和调用的凭证。
 
使用具有较长生命周期的会话token来换取此接口访问token。比如使用user_name/password或api_key/secret_key获取access_token。
 
其曝光频率直接和接口调用频率有关,属于高频使用的凭证。为了照顾到隐私性,尽量减少其生命周期,即使被截取了,也不至于产生严重的后果。
 
注意:在客户端token之下还加上一个access_token, 主要是为了让具有不同生命周期的客户端token最后在调用api的时候, 能够具有统一的认证方式。
 
备注:常用系统使用回话层Token即可满足需求,增加一层access_token用于特殊应用环境。
 
 
应用层:pam_token
 
由已经登录和认证的PC端生成的二维码的原始串号(PC Auth Mobile)。
 
主要步骤如下:
 
1. PC上用户已经完成认证,登录了系统;
2. PC端生成一组和此用户相关联的pam_token
3. PC端将此pam_token的使用链接生成二维码
4. 移动端扫码后,请求服务器,并和用户信息关联
5. 移动端获取refresh_token(长时效的会话)
6. 根据 refresh_token 获取 access_token
7. 完成正常的接口调用工作
 
 
备注:
 
1. 生存周期为2分钟,2分钟后过期删除
2. 没有被使用时,每1分钟变一次
3. 被使用后,立刻删除掉
4. 此种认证模式一般不会被使用到
 
 
应用层:map_token
 
 
由已经登录的移动app来扫码认证PC端系统,并完成PC端系统的登录(Mobile Auth PC)。
 
主要步骤:
 
1. 移动端完成用户身份的认证登录app
2. 未登录的PC生成匿名的 map_token
3. 移动端扫码后在db中生成 map_token 和用户关联(完成签名)
4. db同时针对此用户生成 web_token
5. PC端一直以 map_token 为参数查找此命名用户的 web_token
6. PC端根据 web_token 去获取 access_token
7. 后续正常的调用接口调用工作
 
 
备注:
 
1. 生存周期为2分钟,2分钟后过期删除
2. 没有被使用时,每1分钟变一次
3. 被使用后,立刻删除掉
 

应用场景

 

1. 用户登录

2. 有时效的优惠券发放
3. 有时效的邀请码发放
4. 有时效的二维码授权
5. 具有时效 手机/邮件 验证码
6. 多个不同平台调用同一套API接口

7. 多个平台使用同一个身份认证中心
 
token令牌机制-开发框架文库
 

Token身份认证/Webapi token验证

 
主要是检查当前用户的Token是否有效,包括以下几种状态: 
 
1.令牌不存在,2.令牌过期,3.令牌不同,异地用户登录(或相同用户重新登录)
 
验证失败WebApi服务器抛出ResponseException异常。
 

CSFramework.WebApi Token验证相关源码


C# Code:

C# 全选
/// <summary>
/// 检查当前用户的Token: 1.令牌不存在,2.令牌过期,3.令牌不同,异地用户登录(或相同用户重新登录)
/// 验证失败抛出ResponseException异常.
/// </summary>
/// <param name="userID">用户编号,用户系统账号</param>
/// <param name="token">用户令牌</param>
public static void CheckToken(string userID, string token)
{
  if (String.IsNullOrEmpty(userID) || String.IsNullOrEmpty(token))
  throw new ResponseException(ErrorCodes.JsonFormatInvalide, ErrorCodes.JsonFormatInvalide_Msg);
  
  //重点!!!必须使用账户判断令牌!!!
  //返回null表示过期或用户不存在
     ModelTokenUser tokenUser = TokenProvider.GetTokenByAccount(userID);
  
  //无令牌
     if (tokenUser == null)
  throw new ResponseException(ErrorCodes.TokenExpired, ErrorCodes.TokenExpired_Msg);
  
  //令牌不同,异地有用户登录
     if (tokenUser.Token != token)
  throw new ResponseException(ErrorCodes.TokenDuplicateLogin, ErrorCodes.TokenDuplicateLogin_MSG);
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761
 

C# Code:

C# 全选
/// <summary>
/// 根据系统登录账号获取token
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
public static ModelTokenUser GetTokenByAccount(string account)
{
  if (String.IsNullOrEmpty(account))
  return null;
  else
  {
    return _data.Where(p => p.Value.Account.ToLower() == account.ToLower()).FirstOrDefault().Value;
  }
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761

ModelTokenUser类:
 

C# Code:

C# 全选
/// <summary>
/// 用户令牌数据模型
/// </summary>
public class ModelTokenUser
{
  /// <summary>
  /// 用户编号,或APP系统唯一账号(对应手机号码)
  /// </summary>
     public string Account { get; set; }
  
  /// <summary>
  /// 令牌
  /// </summary>
     public string Token { get; set; }
  
  /// <summary>
  /// 手机号码
  /// </summary>
     public string Phone { get; set; }
  
  /// <summary>
  /// 客户端信息
  /// </summary>
     public string Client { get; set; }
  
  /// <summary>
  /// 版本
  /// </summary>
     public string Version { get; set; }
  
  /// <summary>
  /// 设备编码
  /// </summary>
     public string MID { get; set; }
  
  /// <summary>
  /// 生成Token时间
  /// </summary>
     public DateTime TS { get; set; }
  
  /// <summary>
  /// 过期时间
  /// </summary>
     public int TokenExpires { get; set; }
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761

WebApi Token相关参考文章

 
基于Web前端用户调用CSFramework.WebApi服务端登录登出接口实现
 
CSFramework.WebApi令牌管理器(Token Provider)实现添加、删除、刷新令牌过期控制
 
CSFramework.WebApi后端服务器框架:客户端调用WebApi接口方式(签名+Token令牌)
 
CSFramework.WebApi开发框架模拟Web用户端登录、调用WebApi接口增删改查数据
 
CSFramework.WebApi后端框架Token令牌工作机制以及Token刷新原理
 
WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
 
内容图片-底图-高效开发.追求卓越-开发框架文库
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:CSFramework.WebApi后端框架Token令牌体系架构与应用详解
下一篇:.NET快速开发框架 - 常见快速软件开发平台和开发工具
评论列表

发表评论

评论内容
昵称:
关联文章

WebApi框架Token身份认证,Api接口Token验证
【原创】WebApi开发框架Token生成、Token缓存原理、Token验证、令牌机制与原理
WebApi框架 - 接口认证方式:Bearer Token
CSFramework.WebApi框架Token令牌工作机制以及Token刷新原理
CSFramework.WebApi框架Token令牌体系架构与应用详解
CSFramework.WebApi服务器框架:客户调用WebApi接口方式(签名+Token令牌)
WCF开发框架-客户采用Windows身份认证调用HTTPS协议WCF接口
WCF开发框架-客户采用BASIC身份认证调用HTTPS协议WCF接口
Demo调用WebApi接口 - CSFramework.WebApi开发框架
软件开发框架-WebApi框架培训大纲(1)
WebApi框架服务框架开发微信小程序订阅消息接口
WCF开发框架-客户采用Certificate认证模式调用基于HTTPS协议的WCF接口
Web使用VUE调用WebApi接口实现用户登录及采用Token方式数据交互
数字签名(Data Sign)+存取令牌(Access Token)双重安全请求WebApi接口
C#.NET WebApi接口搭建教程,WebApi接口开发实例
CSFramework.WebApi框架提供两种接口调用方式
CSFramework.WebApi开发框架模拟Web用户登录、调用WebApi接口增删改查数据
客户测试程序(CS.WebApi.Tester)- CSFramework.WebApi框架
WCF:SecurityNegotiationException 调用方未由服务进行身份验证
WebApi接口安全机制:API接口限流防止恶意访问 ThrottlingHandler消息处理机制

热门标签
.NET5 .NET6 .NET7 .NET8 APP Auth-软件授权注册系统 Axios B/S B/S开发框架 Bug Bug记录 C#加密解密 C#源码 C/S CHATGPT CMS系统 CodeGenerator CSFramework.DB CSFramework.EF CSFrameworkV1学习版 CSFrameworkV2标准版 CSFrameworkV3高级版 CSFrameworkV4企业版 CSFrameworkV5旗舰版 CSFrameworkV6.0 CSFrameworkV6.1 DAL数据访问层 Database datalock DbFramework Demo教学 Demo实例 Demo下载 DevExpress教程 DOM EFCore EF框架 Element-UI EntityFramework ERP ES6 Excel FastReport GIT HR IDatabase IIS JavaScript LINQ MES MiniFramework MIS NavBarControl Node.JS NPM OMS Oracle资料 ORM PaaS POS Promise API Redis SAP SEO SQL SQLConnector TMS系统 Token令牌 VS2022 VSCode VUE WCF WebApi WebApi NETCore WebApi框架 WEB开发框架 Windows服务 Winform 开发框架 Winform 开发平台 WinFramework Workflow工作流 Workflow流程引擎 版本区别 报表 踩坑日记 操作手册 代码生成器 迭代开发记录 功能介绍 基础资料窗体 架构设计 角色权限 开发sce 开发技巧 开发教程 开发框架 开发平台 开发指南 客户案例 快速搭站系统 快速开发平台 框架升级 毛衫行业ERP 秘钥 密钥 权限设计 软件报价 软件测试报告 软件简介 软件开发框架 软件开发平台 软件开发文档 软件体系架构 软件下载 软著证书 三层架构 设计模式 生成代码 实用小技巧 收钱音箱 数据锁 数据同步 微信小程序 未解决问题 文档下载 喜鹊ERP 喜鹊软件 系统对接 详细设计说明书 新功能 行政区域数据库 需求分析 疑难杂症 蝇量级框架 蝇量框架 用户管理 用户开发手册 用户控件 在线支付 纸箱ERP 智能语音收款机 自定义窗体 自定义组件 自动升级程序