摘要:在前后端分离的项目里,我们请求接口的流程一般是用户使用用户名密码登录信息正确,接口返回请求需要登录验证的接口,将放到里一起请求接口这里介绍一下,在项目里,是怎么生成的项目的引用里,右键管理程序包搜索,安装即可,要注意项目的要大于等于代码如下
在前后端分离的项目里,我们请求接口的流程一般是:
用户使用用户名密码登录
信息正确,接口返回token
请求需要登录验证的接口,将token放到header里一起请求接口
这里介绍一下,在webapi项目里,token是怎么生成的
项目的引用里,右键:管理NuGet程序包
搜索JWT,安装即可,要注意项目的.NetFrameWork 要大于等于4.6
代码如下
public class TokenInfo
{
public TokenInfo()
{
UserName = "jack.chen";
Pwd = "jack123456";
}
public string UserName { get; set; }
public string Pwd { get; set; }
}
public class TokenHelper
{
public static string SecretKey = "This is a private key for Server";//这个服务端加密秘钥 属于私钥
private static JavaScriptSerializer myJson = new JavaScriptSerializer();
public static string GenToken(TokenInfo M)
{
var payload = new Dictionary
{
{"UserName", M.UserName},//用于存放当前登录人账户信息
{"UserPwd", M.Pwd}//用于存放当前登录人登录密码信息
};
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
return encoder.Encode(payload, SecretKey);
}
public static TokenInfo DecodeToken(string token)
{
try
{
var json = GetTokenJson(token);
TokenInfo info = myJson.Deserialize(json);
return info;
}
catch (Exception)
{
throw;
}
}
public static string GetTokenJson(string token)
{
try
{
IJsonSerializer serializer = new JsonNetSerializer();
IDateTimeProvider provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer, provider);
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
var json = decoder.Decode(token, SecretKey, verify: true);
return json;
}
catch (Exception)
{
throw;
}
}
}
使用cookie也是一样,用户登录之后,用特定的方法生成cookie,返回到浏览器,浏览器每次请求接口或者访问页面的时候,都会带上cookie信息,用于身份验证
c#生成cookie的方法:
public class UserModel
{
public string UserName { get; set; }
public string Pwd { get; set; }
}
public class CookieHelper
{
private static JavaScriptSerializer myJson = new JavaScriptSerializer();
///
/// 设置登录信息cookie
///
///
public static void SetUserCookie(UserModel model)
{
FormsAuthentication.SetAuthCookie(model.UserName, false);
string userStr = myJson.Serialize(model);
//创建ticket
FormsAuthenticationTicket ticket =
new FormsAuthenticationTicket(1, model.UserName, DateTime.Now,
DateTime.Now + FormsAuthentication.Timeout, false, userStr);
//加密
var cookieValue = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieValue)
{
HttpOnly = true,
Secure = FormsAuthentication.RequireSSL,
Domain = FormsAuthentication.CookieDomain,
Path = FormsAuthentication.FormsCookiePath
};
//写入cookie
HttpContext.Current.Response.Cookies.Remove(cookie.Name);
HttpContext.Current.Response.Cookies.Add(cookie);
}
///
/// 获取登录信息的cookie
///
///
public static UserModel GetUserCookie()
{
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (object.Equals(cookie, null) || string.IsNullOrEmpty(cookie.Value))
{
return null;
}
try
{
var ticket = FormsAuthentication.Decrypt(cookie.Value);
if (!object.Equals(ticket, null) && !string.IsNullOrEmpty(ticket.UserData))
{
UserModel userData = myJson.Deserialize(ticket.UserData);
return userData;
}
}
catch (Exception)
{
}
return null;
}
}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/109808.html
摘要:服务器检查该,以此来辨认用户状态。如果为,表示删除该。防篡改签名服务器为每个项生成签名。服务端根据接收到的内容和签名,校验内容是否被篡改。算法得到的签名和请求中数据的签名不一致,则证明数据被篡改。 一、登录认证机制 随着互联网的不断发展,无论是网站还是app,一般都会要求用户注册/登录。主要的登录方式有账户密码登录、第三方登录(微信登录、QQ登录、微博登录等) 登录可分为三个阶段(登录...
摘要:的优势使用简单,性能足够强悍,储存空间无限制,多台服务器可以使用统一的登录态,登录逻辑代码的解耦。每次登录时清除上一次用户的登录信息,即清除登录校验信息,这样就能保证同一用户同一时间只能在一个地方登录。 HI!,你好,我是zane,zanePerfor是一款我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序端。 我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来...
摘要:浏览器的同源策略把跨域请求都禁止了,但是页面中的标签是例外,不受同源策略限制。的理念就是,与服务端约定好一个回调函数名,服务端接收到请求后,将返回一段,在这段代码中调用了约定好的回调函数,并且将数据作为参数进行传递。我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Sessi...
阅读 1596·2021-11-11 11:00
阅读 3698·2021-09-24 09:47
阅读 5952·2021-09-22 15:53
阅读 1229·2021-09-10 10:50
阅读 3418·2021-09-01 11:40
阅读 1364·2019-08-30 15:55
阅读 660·2019-08-30 12:49
阅读 1331·2019-08-29 17:12