实现一个简单的基于Token的身份认证
这个例子是基于客户端与webapi进行进行交互的身份认证,当然也适用于其他情况下的身份认证。
简单的交互过程:

1.首先输入用户名、密码进行登录操作
2.服务器验证用户名、密码的正确性,验证通过之后,服务器对一个json字符串进行加密,加密的内容、加密方法可以自己确定。
本次我加密的内容主要是用户名和登录时间,可根据需求添加其他加密内容,加密方法就是采用DES加密。然后将加密的后的字符串(Token)返回给到客户端,客户端需要自己保存起来。
3.接下来,客户端的每次请求都需要带上这个Token。
4.对于客户端的每次请求,服务器首先都要去获取Token,检查Token是否合法,并解密Token内容,检查Token是否过期等。
Token格式
未加密之前的字符串是什么样的呢,我这里是最简单的格式,如下:
{
"username":"",//用户名
"createtime":""//认证时间
}
登录认证通过之后,把这个json格式的字符串进行加密生成字符串Token,返回给客户端。
至于好处呢,服务器不需要保存会话状态,不用担心会话丢失,也可以减轻服务器压力,然后利用这种方式也方便部署分布式服务,将一个服务拆分成多个小服务,减轻单台服务器的压力。
DES加解密算法
这里只是一种加解密算法而已,根据需要自己选择合适的算法。
const string DESKey = "sddsdds";//秘钥
const string DESIV = "errtertet";//向量
//加密
public string EncryptDES(string ToEncrypt, string DESKey, string DESIV)
{
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{ //创建des实例
byte[] inputByteArray = Encoding.UTF8.GetBytes(ToEncrypt);//将需要加密的内容转为字节
des.Key = ASCIIEncoding.ASCII.GetBytes(DESKey);//秘钥
des.IV = ASCIIEncoding.ASCII.GetBytes(DESIV);//向量
System.IO.MemoryStream ms = new System.IO.MemoryStream();//创建流实例
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{//把输出的内容通过第二个参数转换(加密)馈送到第一个参数ms
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
//转为Base64后输出
string str = Convert.ToBase64String(ms.ToArray());
ms.Close();
return str;
}
}
//解密
public string[] DecodeDES(string Paras, string DESKey, string DESIV)
{
string Str = "";
string[] Ret = new string[] { "",""};
try
{
byte[] inputByteArray = Convert.FromBase64String(Paras);
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = ASCIIEncoding.ASCII.GetBytes(DESKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(DESIV);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
Str = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
Ret[] = "";
Ret[] =Str;
}
}
catch (Exception ex)
{
Ret[] = "-1";
Ret[] = ex.ToString();
}
finally {
}
return Ret;
}
实现一个简单的基于Token的身份认证的更多相关文章
- 基于Token的身份认证 与 基于服务器的身份认证
基于Token的身份认证 与 基于服务器的身份认证 基于服务器的身份认证 在讨论基于Token的身份认证是如何工作的以及它的好处之前,我们先来看一下以前我们是怎么做的: HTTP协议是无状态的,也就是 ...
- 理解ASP.NET Core - 基于Cookie的身份认证(Authentication)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 概述 通常,身份认证(Authentication)和授权(Authorization)都会放 ...
- 基于session和token的身份认证方案
一.基于session的身份认证方案 1.方案图示 2.比较通用的鉴权流程实现如下: 在整个流程中有两个拦截器. 第一个拦截器AuthInteceptor是为了每一次的请求的时候都先去session中 ...
- 基于token与基于服务器的身份认证
1.基于服务器的身份认证 我们清楚 http 协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们就必须要再次认证. 我们与浏览器交互时,比如说登陆成 ...
- 基于Token的身份验证——JWT
初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...
- 基于 Token 的身份验证:JSON Web Token(附:Node.js 项目)
最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等,比起传统的身份验证方法,Token 扩展性更强, ...
- 基于Token的身份验证--JWT
初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...
- JavaWeb—基于Token的身份验证
传统身份验证的方法 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...
- 基于Token的身份验证——JWT(转)
本文转自:http://www.cnblogs.com/zjutzz/p/5790180.html 感谢作者 初次了解JWT,很基础,高手勿喷.基于Token的身份验证用来替代传统的cookie+se ...
随机推荐
- create_volume.go
package api import ( "net/http" "io/ioutil" "errors" & ...
- Go的context的问题
Go的context的问题 2017-05-29 最近被由context引发的一个bug坑得不轻,所以反思一下Go的context的问题. context是隐式的约束,没有检测 如果我们写一个函数,比 ...
- 【二分+最小树形图】UVA11865 比赛网络
Description During 2009 and 2010 ICPC world finals, the contest was webcasted via world wide web. Se ...
- java集合框架之Collections
参考http://how2j.cn/k/collection/collection-collections/369.html Collections是一个类,容器的工具类,就如同Arrays是数组的工 ...
- XSS攻击(出现的原因、预防措施......)
验证XSS攻击重点不是去查找可输入哪些内容会出现什么样的bug就是测试XSS攻击,重点是了解它出现的原理,为什么会出现XSS攻击,导致一些问题出现?如何防御与解决XSS攻击?以下我将简单介绍以上提出的 ...
- selenium IDE工具页面介绍!
selenium IDE工具页面,常用功能点介绍
- Extjs中数据导出到Excel
1.前端代码(URL+前端传入参数) window.location.href="studnetMaintainAction!exportExcel" ...
- 约定Service构建方式
对于DevOps中,将开发好的软件交付给运维人员去部署与维护,过程中参杂着诸多不可控制的变量,如环境问题.版本问题等等,而Docker容器极大程度上解决了这些问题,同时对于服务的持续交付,也变得方便和 ...
- Python调用ansible API系列(一)获取资产信息
你想让ansible工作首先就需要设置资产信息,那么我们如何通过使用Python调取Ansible的API来获取资产信息呢? 要提前准备一个hosts文件 获取组或者主机 #!/usr/bin/env ...
- 我的Windows装机必备软件与生产力工具
目录 系统工具 工作学习 开发工具 VS插件 2018年12月21日,最近要装新电脑,借此将自己常用的工具总结一下. 系统工具 wox,软件快速启动工具,有翻译等插件 everything,本地文件文 ...