成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

C#根據(jù)用戶(hù)信息,生成token和cookie的方法

JaysonWang / 1623人閱讀

摘要:在前后端分離的項(xiàng)目里,我們請(qǐng)求接口的流程一般是用戶(hù)使用用戶(hù)名密碼登錄信息正確,接口返回請(qǐng)求需要登錄驗(yàn)證的接口,將放到里一起請(qǐng)求接口這里介紹一下,在項(xiàng)目里,是怎么生成的項(xiàng)目的引用里,右鍵管理程序包搜索,安裝即可,要注意項(xiàng)目的要大于等于代碼如下

在前后端分離的項(xiàng)目里,我們請(qǐng)求接口的流程一般是:

用戶(hù)使用用戶(hù)名密碼登錄

信息正確,接口返回token

請(qǐng)求需要登錄驗(yàn)證的接口,將token放到header里一起請(qǐng)求接口

這里介紹一下,在webapi項(xiàng)目里,token是怎么生成的

項(xiàng)目的引用里,右鍵:管理NuGet程序包

搜索JWT,安裝即可,要注意項(xiàng)目的.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";//這個(gè)服務(wù)端加密秘鑰 屬于私鑰
    private static JavaScriptSerializer myJson = new JavaScriptSerializer();
    public static string GenToken(TokenInfo M)
    {
        var payload = new Dictionary
            {
                {"UserName", M.UserName},//用于存放當(dāng)前登錄人賬戶(hù)信息
                {"UserPwd", M.Pwd}//用于存放當(dāng)前登錄人登錄密碼信息
            };
        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也是一樣,用戶(hù)登錄之后,用特定的方法生成cookie,返回到瀏覽器,瀏覽器每次請(qǐng)求接口或者訪問(wèn)頁(yè)面的時(shí)候,都會(huì)帶上cookie信息,用于身份驗(yàn)證
c#生成cookie的方法:

public class UserModel
{
    public string UserName { get; set; }
    public string Pwd { get; set; }
}

public class CookieHelper
{
    private static JavaScriptSerializer myJson = new JavaScriptSerializer();

    /// 
    /// 設(shè)置登錄信息cookie
    /// 
    /// 
    public static void SetUserCookie(UserModel model)
    {
        FormsAuthentication.SetAuthCookie(model.UserName, false);
        string userStr = myJson.Serialize(model);
        //創(chuàng)建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
        };
        //寫(xiě)入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;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109808.html

相關(guān)文章

  • 大話javascript 7期:Cookie、SessionToken那些事兒

    摘要:服務(wù)器檢查該,以此來(lái)辨認(rèn)用戶(hù)狀態(tài)。如果為,表示刪除該。防篡改簽名服務(wù)器為每個(gè)項(xiàng)生成簽名。服務(wù)端根據(jù)接收到的內(nèi)容和簽名,校驗(yàn)內(nèi)容是否被篡改。算法得到的簽名和請(qǐng)求中數(shù)據(jù)的簽名不一致,則證明數(shù)據(jù)被篡改。 一、登錄認(rèn)證機(jī)制 隨著互聯(lián)網(wǎng)的不斷發(fā)展,無(wú)論是網(wǎng)站還是app,一般都會(huì)要求用戶(hù)注冊(cè)/登錄。主要的登錄方式有賬戶(hù)密碼登錄、第三方登錄(微信登錄、QQ登錄、微博登錄等) 登錄可分為三個(gè)階段(登錄...

    tianren124 評(píng)論0 收藏0
  • zanePerfor中一套簡(jiǎn)單通用Node前后端Token登錄機(jī)制github授權(quán)登錄方式

    摘要:的優(yōu)勢(shì)使用簡(jiǎn)單,性能足夠強(qiáng)悍,儲(chǔ)存空間無(wú)限制,多臺(tái)服務(wù)器可以使用統(tǒng)一的登錄態(tài),登錄邏輯代碼的解耦。每次登錄時(shí)清除上一次用戶(hù)的登錄信息,即清除登錄校驗(yàn)信息,這樣就能保證同一用戶(hù)同一時(shí)間只能在一個(gè)地方登錄。 HI!,你好,我是zane,zanePerfor是一款我開(kāi)發(fā)的一個(gè)前端性能監(jiān)控平臺(tái),現(xiàn)在支持web瀏覽器端和微信小程序端。 我定義為一款完整,高性能,高可用的前端性能監(jiān)控系統(tǒng),這是未來(lái)...

    0x584a 評(píng)論0 收藏0
  • 你真了解 Cookie Session 嗎

    摘要:瀏覽器的同源策略把跨域請(qǐng)求都禁止了,但是頁(yè)面中的標(biāo)簽是例外,不受同源策略限制。的理念就是,與服務(wù)端約定好一個(gè)回調(diào)函數(shù)名,服務(wù)端接收到請(qǐng)求后,將返回一段,在這段代碼中調(diào)用了約定好的回調(diào)函數(shù),并且將數(shù)據(jù)作為參數(shù)進(jìn)行傳遞。我在做面試官的時(shí)候,曾經(jīng)問(wèn)過(guò)很多朋友這個(gè)問(wèn)題: Cookie 和 Session 有什么區(qū)別呢?大部分的面試者應(yīng)該都可以說(shuō)上一兩句,比如:什么是 Cookie?什么是 Sessi...

    lijy91 評(píng)論0 收藏0
  • web認(rèn)證機(jī)制

    摘要:最近讀了幾篇大牛的博客才對(duì)認(rèn)證機(jī)制方面有了進(jìn)一步了解。盡管在服務(wù)器端可以?xún)?yōu)雅地使用技術(shù)如攔截器或動(dòng)態(tài)代理對(duì)所有進(jìn)行前置的登錄驗(yàn)證。認(rèn)證方式比較支持問(wèn)題和其實(shí)是緊密相聯(lián)的。第三方授權(quán)問(wèn)題采用傳統(tǒng)認(rèn)證方式,若要訪問(wèn)業(yè)務(wù),一定要先登錄。 引言 以前對(duì)認(rèn)證這方面的認(rèn)識(shí)一直不太深刻,不清楚為什么需要token這種認(rèn)證,為什么不簡(jiǎn)單使用session存儲(chǔ)用戶(hù)登錄信息等。最近讀了幾篇大牛的博客才對(duì)認(rèn)...

    fai1017 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<