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

如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證

這篇具有很好參考價值的文章主要介紹了如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

JWT(Json Web Token)

jwt是一種用于身份驗(yàn)證的開放標(biāo)準(zhǔn),他可以在網(wǎng)絡(luò)之間傳遞信息,jwt由三部分組成:頭部,載荷,簽名。頭部包含了令牌的類型和加密算法,載荷包含了用戶的信息,簽名則是對頭部和載荷的加密結(jié)果。

jwt鑒權(quán)驗(yàn)證是指在用戶登錄成功后,服務(wù)器生成一個jwt令牌并返回給客戶端,客戶端在后續(xù)的請求中攜帶該令牌,服務(wù)通過令牌的簽名來確定用戶的身份和權(quán)限。這種方式可以避免在每個請求中都需要進(jìn)行身份驗(yàn)證,提高了系統(tǒng)的性能和安全性。

jwt具有以下優(yōu)點(diǎn):

1.無狀態(tài):jwt令牌包含了所有必要的信息,服務(wù)器不需要再每個請求中都進(jìn)行身份驗(yàn)證,避免了服務(wù)器存儲會話信息的開銷。

2.可擴(kuò)展性:jwt令牌可以包含任意的信息,可以根據(jù)需要添加自定義的字段。

3.安全性:jwt令牌使用簽名來保證數(shù)據(jù)的完整性和真實(shí)性,防止數(shù)據(jù)被篡改或偽造。

4.跨平臺:jwt令牌是基于json格式的,可以再不同的變成語言和平臺之間進(jìn)行傳遞和解析。

如何在webapi中使用JWT?

1.首先在項(xiàng)目中添加如下兩個包

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
dotnet add package System.IdentityModel.Tokens.Jwt

也可以直接在Nuget包管理工具中搜索

如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證

2.創(chuàng)建JwtOptions模型類,同時在appsetting.json中添加對應(yīng)配置

    public class JwtOptions
    {
        /// <summary>
        /// 簽發(fā)者
        /// </summary>
        public string Issuer { get; set; }

        /// <summary>
        /// 接收者
        /// </summary>
        public string Audience { get; set; }

        /// <summary>
        /// 密鑰
        /// </summary>
        public string Key { get; set; }

        /// <summary>
        /// 過期時間
        /// </summary>
        public int ExpireSeconds { get; set; }
    }
  "JWT": {
    "Issuer": "簽發(fā)方",
    "Audience": "接受方",
    "Key": "A86DA130-1B95-4748-B3B2-1B6AA9F2F743",//加密密鑰
    "ExpireSeconds": 600 //密鑰過期時間
  }

3.創(chuàng)建JWTExtensions靜態(tài)類,添加AddJWTAuthentication擴(kuò)展方法

    public static class JWTExtensions
    {
        public static AuthenticationBuilder AddJWTAuthentication(this IServiceCollection services, JwtOptions jwtOptions)
        {
            return services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(x =>
                {
                    x.TokenValidationParameters = new()
                    {
                        ValidateIssuer = true,//是否驗(yàn)證發(fā)行商
                        ValidateAudience = true,//是否驗(yàn)證受眾者
                        ValidateLifetime = true,//是否驗(yàn)證失效時間
                        ValidateIssuerSigningKey = true,//是否驗(yàn)證簽名鍵
                        ValidIssuer = jwtOptions.Issuer,
                        ValidAudience = jwtOptions.Audience,
                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.Key))
                    };
                });
        }
    }

4.創(chuàng)建SwaggerGenOptionsExtensions靜態(tài)類,添加AddAuthenticationHeader擴(kuò)展方法,為swagger增加Authentication報文頭

?

    public static class SwaggerGenOptionsExtensions
    {
        /// <summary>
        /// 為swagger增加Authentication報文頭
        /// </summary>
        /// <param name="option"></param>
        public static void AddAuthenticationHeader(this SwaggerGenOptions option)
        {
            option.AddSecurityDefinition("Authorization",
                new OpenApiSecurityScheme
                {
                    Description = "Authorization header. \r\nExample:Bearer 12345ABCDE",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    Scheme = "Authorization"
                }
                ); ;

            option.AddSecurityRequirement(new OpenApiSecurityRequirement()
            {
                {
                    new OpenApiSecurityScheme
                    {
                        Reference=new OpenApiReference
                        {
                            Type=ReferenceType.SecurityScheme,
                            Id="Authorization"
                        },
                        Scheme="oauth2",
                        Name="Authorization",
                        In=ParameterLocation.Header,
                    },
                    new List<string>()
                }
            });
        }
    }

5.創(chuàng)建IJwtService接口及實(shí)現(xiàn)JwtService類,其為構(gòu)建token服務(wù)

    public interface IJwtService
    {
        string BuildToken(IEnumerable<Claim> claims, JwtOptions options);
    }
    public class JwtService : IJwtService
    {
        public string BuildToken(IEnumerable<Claim> claims, JwtOptions options)
        {
            //過期時間
            TimeSpan timeSpan = TimeSpan.FromSeconds(options.ExpireSeconds);//token過期時間
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.Key));//加密的token密鑰
            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);//簽名證書,其值為securityKey和HmacSha256Signature算法
            var tokenDescriptor = new JwtSecurityToken(options.Issuer, options.Audience, claims, expires: DateTime.Now.Add(timeSpan), signingCredentials: credentials);//表示jwt token的描述信息,其值包括Issuer簽發(fā)方,Audience接收方,Claims載荷,過期時間和簽名證書
            return new JwtSecurityTokenHandler().WriteToken(tokenDescriptor);//使用該方法轉(zhuǎn)換為字符串形式的jwt token返回
        }
    }

6.將上述服務(wù)盡數(shù)注冊

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddScoped<IJwtService, JwtService>();
JwtOptions jwtOpt = builder.Configuration.GetSection("JWT").Get<JwtOptions>();
builder.Services.AddJWTAuthentication(jwtOpt);
builder.Services.Configure<SwaggerGenOptions>(c =>
{
    c.AddAuthenticationHeader();
});

var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.UseHttpsRedirection();
app.UseAuthentication();//注意,一定得先啟動這個
app.UseAuthorization();
//以下回答來自GPT
//app.UseAuthentication()是啟用身份驗(yàn)證中間件,它會驗(yàn)證請求中的身份信息,并將身份信息存儲在HttpContext.User屬性中。而app.UseAuthorization()是啟用授權(quán)中間件,它會檢查HttpContext.User中的身份信息是否有訪問當(dāng)前請求所需的權(quán)限。
//一定要先啟用身份驗(yàn)證中間件再啟用授權(quán)中間件,因?yàn)槭跈?quán)中間件需要使用身份驗(yàn)證中間件存儲的身份信息來進(jìn)行權(quán)限驗(yàn)證。如果沒有啟用身份驗(yàn)證中間件,授權(quán)中間件將無法獲取到身份信息,從而無法進(jìn)行權(quán)限驗(yàn)證。
app.MapControllers();
app.Run();

7.在控制器中添加[ApiController]特性開啟jwt鑒權(quán),在登錄接口中返回token

    [ApiController]
    [Route("[controller]/[action]")]
    [Authorize]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

        private readonly ILogger<WeatherForecastController> _logger;
        //jwt服務(wù)

        private readonly IJwtService _jwtService;

        private readonly IConfiguration _configuration;

        public WeatherForecastController(ILogger<WeatherForecastController> logger, IJwtService jwtService, IConfiguration configuration)
        {
            _logger = logger;
            _jwtService = jwtService;
            _configuration = configuration;
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }

        //AllowAnonymous允許匿名訪問
        [AllowAnonymous, HttpGet]
        public string GetToken()
        {
            var jwtopntion = _configuration.GetSection("JWT").Get<JwtOptions>();
            List<Claim> claims = new List<Claim>();
            claims.Add(new Claim(ClaimTypes.Name, "用戶1"));
            claims.Add(new Claim(ClaimTypes.Role, "超級管理員"));
            return _jwtService.BuildToken(claims, jwtopntion);
        }
    }

效果測試

如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證

?

直接調(diào)用Get方法返回401,鑒權(quán)失敗

?

如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證

?調(diào)用GetToken方法,取得token

如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證

?點(diǎn)擊右上角綠色按鈕

如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證

?value中輸入的值為bearer,空一格,加上之前取得的token,點(diǎn)擊授權(quán)

如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證

?調(diào)用成功文章來源地址http://www.zghlxwxcb.cn/news/detail-468215.html

到了這里,關(guān)于如何在.net6webapi中配置Jwt實(shí)現(xiàn)鑒權(quán)驗(yàn)證的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • .NET WebAPI 運(yùn)用JWT鑒權(quán)授權(quán)

    1:引用需要的程序集 :System.IdentityModel.Token.JWT 2:創(chuàng)建一個新的控制器,用于授權(quán)功能 3:服務(wù)中進(jìn)行注冊 4:啟動鑒權(quán)授權(quán) 5:在需要的鑒權(quán)授權(quán)的API? 中調(diào)用 6:發(fā)送請求接口時候? 請求頭 {Authorzation:\\\"bearer\\\"+空格 + token}

    2024年02月14日
    瀏覽(21)
  • ASP.NET CORE WEBAPI 登錄 JWT 鑒權(quán) ,接口權(quán)限驗(yàn)證

    介紹 當(dāng)今Web開發(fā)中,API的使用越來越廣泛,而API的安全性也變得越來越重要。其中,JWT(JSON Web Token)鑒權(quán)和授權(quán)是一種常見的解決方案。 本篇文章將會介紹JWT鑒權(quán)和授權(quán)的原理、實(shí)現(xiàn)方式以及注意事項(xiàng)。 什么是JWT? JWT是一種基于JSON格式的開放標(biāo)準(zhǔn)(RFC7519),用于在網(wǎng)絡(luò)

    2023年04月21日
    瀏覽(87)
  • ASP.NET Core 8.0 WebApi 從零開始學(xué)習(xí)JWT登錄認(rèn)證

    ASP.NET Core 8.0 WebApi 從零開始學(xué)習(xí)JWT登錄認(rèn)證

    我一起寫后端Api我都是直接裸連的,但是現(xiàn)在為了規(guī)范一些,我還是打算上一個JWT功能 ASP.NET Web API 2系列(四):基于JWT的token身份認(rèn)證方案 Jwt-dotnet github 選好了模板,就進(jìn)去看看號了,42M的下載量已經(jīng)很高了,一般來說,只要超過500k的下載量,基本就是一個穩(wěn)定的代碼倉庫了

    2024年04月09日
    瀏覽(24)
  • Ubuntu 安裝.net6.0+配置 .net環(huán)境變量

    wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh sudo chmod +x ./dotnet-install.sh 該腳本默認(rèn)安裝最新的?長期支持 (LTS)?SDK 版本,即 .NET 6。 若要安裝最新版本(可能不是 LTS) 版本的 (版本),請使用? --version latest ?參數(shù)。 ./dotnet-install.sh --version latest 若要安裝 .NET 運(yùn)行時而非 SDK,

    2024年02月09日
    瀏覽(18)
  • .NET6讀取appsettings.json配置

    基于 .NET 6.0 創(chuàng)建的 WebAPI 項(xiàng)目,自動生成的 appsettings.json 配置模板,在當(dāng)前項(xiàng)目(dll)中可以通過構(gòu)造函數(shù)注入 Configuration 來讀取。 那么不在當(dāng)前項(xiàng)目中怎么讀取配置呢?例如下面這樣的項(xiàng)目, appsesttings.json 在 Xuanjun.Blog.Server.API 中,但是想在 Xuanjun.Blog.Server.Core 讀取配置,怎么

    2024年02月10日
    瀏覽(25)
  • 收集.NET6中一些常用組件的配置

    介紹 .NET 6的CoreApp框架,用來學(xué)習(xí).NET6的一些變動和新特性,使用EFCore,等一系列組件的運(yùn)用; 軟件架構(gòu) 分為模型層,服務(wù)層,接口層來做測試使用 0.如何使用IConfiguration、Environment 直接在builder后的主機(jī)中使用。 1.如何使用Swagger .NET 6 自帶模板已經(jīng)默認(rèn)添加Swagger,直接使用即

    2024年02月07日
    瀏覽(38)
  • .NET Core WebAPI中封裝Swagger配置

    .NET Core WebAPI中封裝Swagger配置

    創(chuàng)建一個Utility/SwaggerExt文件夾,添加一個類 在SwaggerExt類中添加方法,將相關(guān)配置添寫入 調(diào)用封裝的方法

    2024年02月20日
    瀏覽(28)
  • .net core .net6 讀取數(shù)據(jù)庫 讀取配置文件 保姆級教程

    .net core .net6 讀取數(shù)據(jù)庫 讀取配置文件 保姆級教程

    本文環(huán)境 Microsoft Visual Studio 2022 .Net6 SQLServer2019 在解決方案管理器右鍵添加相關(guān)的包,如下兩個包 Microsoft.Data.SqlClient SQLServer SQLServer數(shù)據(jù)庫 Microsoft.Extensions.Configuration.Json json配置文件 添加配置文件 appsettings.json,選始終復(fù)制 添加json配置文件內(nèi)容如下 DefaultConnection 根據(jù)自己的

    2024年02月08日
    瀏覽(25)
  • Asp.net core Webapi 如何執(zhí)行定時任務(wù)?

    Asp.net core Webapi 如何執(zhí)行定時任務(wù)?

    在計(jì)算機(jī)系統(tǒng)中,定時執(zhí)行一些后臺任務(wù)是很常見的場景,比如定時發(fā)送郵件、備份數(shù)據(jù)等等。 那么,.NET 技術(shù)如何通過編程靈活地實(shí)現(xiàn)項(xiàng)目里復(fù)雜的自定義任務(wù)呢? 如果是 Windows 生態(tài),通常來說,可以有這些方式: 編寫一個程序,通過 Windows 內(nèi)置的任務(wù)計(jì)劃來定時執(zhí)行。

    2024年02月04日
    瀏覽(90)
  • 如何在 .NET Core WebApi 中處理 MultipartFormDataContent

    如何在 .NET Core WebApi 中處理 MultipartFormDataContent

    最近在對某個后端服務(wù)做 .NET Core 升級時,里面使用了多處處理 MultipartFormDataContent 相關(guān)內(nèi)容的代碼。這些地方從 .NET Framework 遷移到 .NET Core 之后的代碼改動較大,由于本身沒有測試覆蓋,導(dǎo)致在部署 QA 環(huán)境后引發(fā)了一些問題。這里做一個技術(shù)復(fù)盤。 我們在做后端接口開發(fā)的

    2023年04月19日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包