摘要:在前后端分離的項目里,我們請求接口的流程一般是用戶使用用戶名密碼登錄信息正確,接口返回請求需要登錄驗證的接口,將放到里一起請求接口這里介紹一下,在項目里,是怎么生成的項目的引用里,右鍵管理程序包搜索,安裝即可,要注意項目的要大于等于代碼如下
在前后端分離的項目里,我們請求接口的流程一般是:
用戶使用用戶名密碼登錄
信息正確,接口返回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; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109808.html
摘要:服務器檢查該,以此來辨認用戶狀態。如果為,表示刪除該。防篡改簽名服務器為每個項生成簽名。服務端根據接收到的內容和簽名,校驗內容是否被篡改。算法得到的簽名和請求中數據的簽名不一致,則證明數據被篡改。 一、登錄認證機制 隨著互聯網的不斷發展,無論是網站還是app,一般都會要求用戶注冊/登錄。主要的登錄方式有賬戶密碼登錄、第三方登錄(微信登錄、QQ登錄、微博登錄等) 登錄可分為三個階段(登錄...
摘要:的優勢使用簡單,性能足夠強悍,儲存空間無限制,多臺服務器可以使用統一的登錄態,登錄邏輯代碼的解耦。每次登錄時清除上一次用戶的登錄信息,即清除登錄校驗信息,這樣就能保證同一用戶同一時間只能在一個地方登錄。 HI!,你好,我是zane,zanePerfor是一款我開發的一個前端性能監控平臺,現在支持web瀏覽器端和微信小程序端。 我定義為一款完整,高性能,高可用的前端性能監控系統,這是未來...
摘要:瀏覽器的同源策略把跨域請求都禁止了,但是頁面中的標簽是例外,不受同源策略限制。的理念就是,與服務端約定好一個回調函數名,服務端接收到請求后,將返回一段,在這段代碼中調用了約定好的回調函數,并且將數據作為參數進行傳遞。我在做面試官的時候,曾經問過很多朋友這個問題: Cookie 和 Session 有什么區別呢?大部分的面試者應該都可以說上一兩句,比如:什么是 Cookie?什么是 Sessi...
閱讀 1325·2021-11-11 11:00
閱讀 3041·2021-09-24 09:47
閱讀 4951·2021-09-22 15:53
閱讀 960·2021-09-10 10:50
閱讀 3207·2021-09-01 11:40
閱讀 1160·2019-08-30 15:55
閱讀 473·2019-08-30 12:49
閱讀 1049·2019-08-29 17:12