国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

AspNetCore 成長雜記(一):JWT授權(quán)鑒權(quán)之生成JWT(其二)

這篇具有很好參考價值的文章主要介紹了AspNetCore 成長雜記(一):JWT授權(quán)鑒權(quán)之生成JWT(其二)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引子

前面說了用第三方類庫生成JWT的故事,給我?guī)砹撕艽蟮姆奖悖⑶椅乙渤兄Z要寫一篇用常規(guī)方法生成JWT的文章(一般都是用微軟官方的類庫),因此才有了這篇文章。
另外,在前面的文章中,我要糾正一下一些錯誤JWT的整個結(jié)構(gòu)決定了JWT只能作為臨時的授權(quán)認(rèn)證解決方案,如果對用戶的機密性要求比較高,必須用有狀態(tài)控制管理的解決方案,JWT只能作為一般性方案使用,它的應(yīng)用場合主要是由多個WebAPI構(gòu)成的多進程多線程多接口這樣的微服務(wù)架構(gòu),是為了解決使用狀態(tài)管理帶來的不便才應(yīng)用而生,一般JWT必須和HTTPS配合才會具有安全性。這是因為JWT作為一種可被破解的數(shù)據(jù),只有TLS加密后,才不會被真正破解。
在微軟的Indentiy認(rèn)證框架中(我個人感覺應(yīng)該叫ASP.NET Core Indentity),MVC和WebAPI雖然使用不同的Nuget包,但本質(zhì)是一樣的……廢話不多說了,直接正題開始:有請我們的主角:JwtSecurityTokenHandler(從名字中就知道它和數(shù)據(jù)庫操作有關(guān),JWT中的數(shù)據(jù)一般都是來自用戶數(shù)據(jù)庫,helper一般用來表示資源管理),后面我們會通過它來實現(xiàn)JWT的生成。

實施

和前面一樣,我們這里主要講解最常用的非對稱算法的JWT,這里采用的算法是RSA,當(dāng)然你也可以采用其他算法來達到目標(biāo)。
首先需要安裝nuget包Microsoft.AspNetCore.Authentication.JwtBearer,當(dāng)然,有的文章會讓你安裝一個System.IdentityModel.Tokens.JWT的包,這個完全不需要,因為前面的包已經(jīng)包含后者了,你只要在引用包以后,構(gòu)建一下工程,在dubug目錄里面找到項目生成文件,就會發(fā)現(xiàn)這個dll被放進去了。
由于ASP.NET Core是以依賴注入為主的,而這個包作為一個Service(服務(wù)),需要使用其自身提供的擴展方法來注入ASP.NET Core 的WebApplication的Service對象(IOC容器)中進行集中管理。

點擊查看實現(xiàn)代碼
builder.Services.AddAuthentication()..AddJwtBearer(jwtOptions =>{
    jwtOptions.Authority = "https://jwtserver.test.net";
    //jwtOptions.Audience = "jwtresouce";
    jwtOptions.TokenValidationParameters = new TokenValidationParameters()
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = builder.Configuration["Jwt:Issuer"],//發(fā)行者
        ValidAudience = builder.Configuration["Jwt:Audience"], //訂閱者
        IssuerSigningKey = new RsaSecurityKey(RSA.Create(2048))  //jwt簽名算法
    };
})
之后再創(chuàng)建一個用來生成JWT的控制器(~~個人比較推薦使用控制器,而不是MiniAPI,感覺MiniAPI更適合比較簡單的場景,比較復(fù)雜的場景還是得用控制器~~)。這樣可以使得我們每次訪問時獲取到一個臨時的JWT。 先說說大體流程:
  1. 先創(chuàng)建一個用來生成JWT的JwtSecurityTokenHandler對象,為后面的工作提供基礎(chǔ)
  2. 再創(chuàng)建一個數(shù)組,用來存放用戶信息
  3. 創(chuàng)建SecurityTokenDescriptor對象,設(shè)置JWT的加密算法,有效期等屬性
  4. 調(diào)用之前創(chuàng)建的JwtSecurityTokenHandler對象的CreateToken方法,創(chuàng)建一個令牌對象,再調(diào)用WriteToken方法,獲得到字符串格式的JWT
  5. 返回結(jié)果
點擊查看實現(xiàn)代碼
[HttpPost]
    public string CreateJwtSecurityToken()
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        

        var mookdata = new Dictionary<string, string>();
        mookdata[ClaimTypes.Name] = "John Doe";
        mookdata[ClaimTypes.Email] = "johndoe@example.com";
        mookdata[ClaimTypes.Role] = "vistor";

        var claims = new Claim[mookdata.Count - 1];
        foreach (var item in mookdata)
        {
            for (int i = 0; i < claims.Length; i++)
            {
                claims[i] = new Claim(item.Key, item.Value);
            }
        }

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.UtcNow.AddDays(7),
            SigningCredentials = new SigningCredentials(new RsaSecurityKey(RSA.Create(2048)),
                SecurityAlgorithms.RsaSha256Signature)
        };

        var token = tokenHandler.CreateToken(tokenDescriptor);
        var tokenString = tokenHandler.WriteToken(token);

        return tokenString;
    }

總結(jié)

上述講到的方法一般都是比較常用的方法(這個好像是來自微軟官方文檔),先對于上篇文章,它相對比較靈活,不會涉及到x509證書的問題,而且解決方案比較多,容易應(yīng)用。
關(guān)于生成JWT,我也是簡單的了解和使用,因此層次不少太深,如果讀者在其中發(fā)現(xiàn)了問題,也歡迎各位提出寶貴的意見,謝謝。
關(guān)于JWT,我想說這只是WebAPI授權(quán)鑒權(quán)的開端,不是終點,如果有時間,我會再寫一篇結(jié)合JWT來授權(quán)鑒權(quán)的文章,來更好的理解JWT的應(yīng)用,希望我的文章會給您帶來幫助,讓我們一起期待吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-426240.html

到了這里,關(guān)于AspNetCore 成長雜記(一):JWT授權(quán)鑒權(quán)之生成JWT(其二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • WebApi中添加Jwt鑒權(quán)

    WebApi中添加Jwt鑒權(quán)

    JSON Web Token(JWT)是一個非常輕巧的規(guī)范。這個規(guī)范允許我們使用 JWT 在用戶和服務(wù)器之間傳遞安全可靠的信息。一個 JWT 實際上就是一個字符串,它由三部分組成,頭部、載荷與簽名。前兩部分需要經(jīng)過 Base64 編碼,后一部分通過前兩部分 Base64 編碼后再加密而成。針對前后端

    2024年02月08日
    瀏覽(18)
  • Springboot實現(xiàn)簡單JWT登錄鑒權(quán)

    登錄需要鑒權(quán)是為了保護系統(tǒng)的安全性和用戶的隱私。在一個 Web 應(yīng)用中,用戶需要提供一定的身份信息(例如用戶名和密碼)進行登錄,登錄后系統(tǒng)會為用戶生成一個身份令牌(例如 JWT Token)來標(biāo)識用戶的身份。 鑒權(quán)的主要目的是確保只有經(jīng)過身份驗證的用戶才能訪問系統(tǒng)

    2024年02月13日
    瀏覽(57)
  • 【Express.js】JWT基礎(chǔ)鑒權(quán)

    Web安全是Web應(yīng)用中非常重要的一環(huán),主要由后端和服務(wù)器承擔(dān)安全保障 面對請求源,后端有著各種各樣的鑒權(quán)機制: session,cookie,token,jwt,OAuth,OAuth2,api-key,signature… 本節(jié)以jwt為例,演示一個極簡的token鑒權(quán) 拷貝第一節(jié)HelloWorld項目 安裝一種jwt依賴(本節(jié)使用jsonwebtoken) 接下來我們使

    2024年02月09日
    瀏覽(45)
  • 在Nodejs中使用JWT進行鑒權(quán)

    在Nodejs中使用JWT進行鑒權(quán)

    JSON Web Token(JWT)是一種用于在web上傳遞信息的標(biāo)準(zhǔn),它以JSON格式表示信息,通常用于身份驗證和授權(quán)。 JWT由三個部分組成:Header(頭部)、Payload(負載)和Signature(簽名)。它們用點號分隔開,形成了一個JWT令牌。 Header Header(頭部)是JWT結(jié)構(gòu)的第一部分,它是一個包含關(guān)

    2024年02月10日
    瀏覽(43)
  • ASP.NET Core 鑒權(quán)授權(quán)三(自定義授權(quán)策略、多授權(quán)策略、多鑒權(quán)架構(gòu))

    ASP.NET Core 鑒權(quán)授權(quán)三(自定義授權(quán)策略、多授權(quán)策略、多鑒權(quán)架構(gòu))

    此處鑒權(quán)給的值是6,授權(quán)用的1,嘗試訪問 基于策略的授權(quán)中有一個很重要的概念是Requirements,每一個Requirement都代表一個授權(quán)條件。 Requirement需要繼承接口IAuthorizationRequirement。 已經(jīng)內(nèi)置了一些常用的實現(xiàn): AssertionRequirement :使用最原始的斷言形式來聲明授權(quán)策略。 DenyAn

    2024年02月03日
    瀏覽(34)
  • 前端刷新token,判斷token是否過期(jwt鑒權(quán))

    前端刷新token,判斷token是否過期(jwt鑒權(quán))

    4.1 什么是 JWT JWT 是 Auth0 提出的通過 對 JSON 進行加密簽名來實現(xiàn)授權(quán)驗證的方案; 就是登錄成功后將相關(guān)用戶信息組成 JSON 對象,然后對這個對象進行某種方式的加密,返回給客戶端; 客戶端在下次請求時帶上這個 Token; 服務(wù)端再收到請求時校驗 token 合法性,其實也就是在

    2024年02月03日
    瀏覽(22)
  • JWT加密解密登錄鑒權(quán)邏輯是什么?

    JWT(JSON Web Token)是一種用于進行認(rèn)證和授權(quán)的開放標(biāo)準(zhǔn),它可以安全地傳輸信息,通常用于實現(xiàn)身份驗證和鑒權(quán)邏輯。 以下是使用JWT進行登錄鑒權(quán)的一般邏輯: 1:用戶登錄: 用戶提供用戶名和密碼進行登錄。 服務(wù)器驗證用戶提供的憑據(jù)是否有效。 2:生成JWT: 服務(wù)器驗證

    2024年02月06日
    瀏覽(16)
  • SpringCloud搭建微服務(wù)之Gateway+Jwt實現(xiàn)統(tǒng)一鑒權(quán)

    SpringCloud搭建微服務(wù)之Gateway+Jwt實現(xiàn)統(tǒng)一鑒權(quán)

    在微服務(wù)項目中,需要對整個微服務(wù)系統(tǒng)進行權(quán)限校驗,通常有兩種方案,其一是每個微服務(wù)各自鑒權(quán),其二是在網(wǎng)關(guān)統(tǒng)一鑒權(quán),第二種方案只需要一次鑒權(quán)就行,避免了每個微服務(wù)重復(fù)鑒權(quán)的麻煩,本文以網(wǎng)關(guān)統(tǒng)一鑒權(quán)為例介紹如何搭建微服務(wù)鑒權(quán)項目。 本文案例中共有四

    2024年02月13日
    瀏覽(23)
  • 【從0到1設(shè)計一個網(wǎng)關(guān)】基于JWT實現(xiàn)用戶鑒權(quán)

    代碼講解鏈接 項目開源代碼-點個star領(lǐng)取完整4w字開發(fā)文檔 JWT(JSON Web Token)是一種開放標(biāo)準(zhǔn)(RFC 7519),用于在各方之間安全地傳輸信息作為 JSON 對象。它通常用于在不同系統(tǒng)之間進行身份驗證和授權(quán),以及在各種應(yīng)用中傳遞聲明性信息。 JWT 由三部分組成,它們通過點號(

    2024年02月05日
    瀏覽(17)
  • react+koa+vite前后端模擬jwt鑒權(quán)過程

    路由組件(生成token) token解析 注冊中間件 前端請求(登錄+打開主頁)

    2024年02月10日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包