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

在NET8中使用簡化的 AddJwtBearer 認(rèn)證

這篇具有很好參考價值的文章主要介紹了在NET8中使用簡化的 AddJwtBearer 認(rèn)證。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

開發(fā)環(huán)境

系統(tǒng)版本: win10
.NET SDK: NET8
開發(fā)工具:vscode
參考引用:使用 dotnet user-jwts 管理開發(fā)中的 JSON Web 令牌
注意:以下示例中的端口、token等需替換成你的環(huán)境中的信息

創(chuàng)建項目

運行以下命令來創(chuàng)建一個空的 Web 項目,并添加 Microsoft.AspNetCore.Authentication.JwtBearer NuGet 包:

dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

將 Program.cs 的內(nèi)容替換為以下代碼(略微改動):

using System.Security.Claims;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthorization();
// 默認(rèn)的Scheme是Bearer
// builder.Services.AddAuthentication("Bearer").AddJwtBearer();
builder.Services.AddAuthentication().AddJwtBearer();

var app = builder.Build();

app.UseAuthorization();

app.MapGet("/", () => "Hello, World!");
app.MapGet("/secret", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. My secret")
    .RequireAuthorization();

app.Run();

運行項目并訪問接口返回以下內(nèi)容

PS D:\Learn\MyJWT> curl.exe -i http:///localhost:5276
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Mon, 04 Dec 2023 00:43:03 GMT    
Server: Kestrel
Transfer-Encoding: chunked

Hello, World!

創(chuàng)建 JWT

PS D:\Learn\MyJWT> dotnet user-jwts create
New JWT saved with ID 'c28b968'.
Name: Lingpeng

Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IkxpbmdwZW5nIiwic3ViIjoiTGluZ3BlbmciLCJqdGkiOiJjMjhiOTY4IiwiYXVkIjpbImh0dHA6Ly9sb2NhbGhvc3Q6Mjk3NTQiLCJodHRwczovL2xvY2FsaG9zdDo0NDM2MCIsImh0dHA6Ly9sb2NhbGhvc3Q6NTI3NiIsImh0dHBzOi8vbG9jYWxob3N0OjcyNTMiXSwibmJmIjoxNzAxNjQ5Nzk2LCJleHAiOjE3MDk1MTIxOTYsImlhdCI6MTcwMTY0OTc5NiwiaXNzIjoiZG90bmV0LXVzZXItand0cyJ9.l52s9_7oNjIKL96TysgdE0k970fUS9FoLTu2xRs-IPo

這個命令做了3件事:

  1. 更新項目的 appsettings.Development.json,添加了Authentication節(jié)點
  2. 更新項目的 MyJWT.csproj,添加了UserSecretsId 配置
  3. 創(chuàng)建了機密文件 %APPDATA%\Microsoft\UserSecrets\<secrets_GUID>\user-jwts.json%APPDATA%\Microsoft\UserSecrets\<secrets_GUID>\secrets.json,機密管理參考

我們看下這兩個機密文件
user-jwts.json

{
    "c28b968": {
        "Id": "c28b968",
        "Scheme": "Bearer",
        "Name": "Lingpeng",
        "Audience": "http://localhost:29754, https://localhost:44360, http://localhost:5276, https://localhost:7253",
        "NotBefore": "2023-12-04T00:29:56+00:00",
        "Expires": "2024-03-04T00:29:56+00:00",
        "Issued": "2023-12-04T00:29:56+00:00",
        "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IkxpbmdwZW5nIiwic3ViIjoiTGluZ3BlbmciLCJqdGkiOiJjMjhiOTY4IiwiYXVkIjpbImh0dHA6Ly9sb2NhbGhvc3Q6Mjk3NTQiLCJodHRwczovL2xvY2FsaG9zdDo0NDM2MCIsImh0dHA6Ly9sb2NhbGhvc3Q6NTI3NiIsImh0dHBzOi8vbG9jYWxob3N0OjcyNTMiXSwibmJmIjoxNzAxNjQ5Nzk2LCJleHAiOjE3MDk1MTIxOTYsImlhdCI6MTcwMTY0OTc5NiwiaXNzIjoiZG90bmV0LXVzZXItand0cyJ9.l52s9_7oNjIKL96TysgdE0k970fUS9FoLTu2xRs-IPo",
        "Scopes": [],
        "Roles": [],
        "CustomClaims": {}
    }
}

secrets.json

{
    "Authentication:Schemes:Bearer:SigningKeys": [
        {
            "Id": "ff20683d",
            "Issuer": "dotnet-user-jwts",
            "Value": "lDOFmIuEDelFKU0zAaLoT2qYOFDRZGDDTv5FyTa36V8=",
            "Length": 32
        }
    ]
}

測試JWT

我們重新運行程序,用直接訪問與攜帶token兩種方式訪問/secret接口

PS D:\Learn\MyJWT> curl.exe -i http://localhost:5276/secret
HTTP/1.1 401 Unauthorized
Content-Length: 0
Date: Mon, 04 Dec 2023 00:43:25 GMT
Server: Kestrel
WWW-Authenticate: Bearer

PS D:\Learn\MyJWT> 
PS D:\Learn\MyJWT> 
PS D:\Learn\MyJWT> curl.exe -i -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IkxpbmdwZW5nIiwic3ViIjoiTGluZ3BlbmciLCJqdGkiOiJjMjhiOTY4IiwiYXVkIjpbImh0dHA6Ly9sb2NhbGhvc3Q6Mjk3NTQiLCJodHRwczovL2xvY2FsaG9zdDo0NDM2MCIsImh0dHA6Ly9sb2NhbGhvc3Q6NTI3NiIsImh0dHBzOi8vbG9jYWxob3N0OjcyNTMiXSwibmJmIjoxNzAxNjQ5Nzk2LCJleHAiOjE3MDk1MTIxOTYsImlhdCI6MTcwMTY0OTc5NiwiaXNzIjoiZG90bmV0LXVzZXItand0cyJ9.l52s9_7oNjIKL96TysgdE0k970fUS9FoLTu2xRs-IPo" http://localhost:5276/secret
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Mon, 04 Dec 2023 00:45:42 GMT
Server: Kestrel
Transfer-Encoding: chunked

Hello Lingpeng. My secret

至此我們已經(jīng)實現(xiàn)了JwtBearer的初步使用

一點點改動

示例采用了機密管理,我們也可以把機密文件中的內(nèi)容遷移至項目中(推薦用機密管理),我們修改MyJWT.csprojappsettings.Development.json如下

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <!-- <UserSecretsId>88d7c163-def1-4747-b01f-cefed382beae</UserSecretsId> -->
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />
  </ItemGroup>

</Project>
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "Authentication": {
    "Schemes": {
      "Bearer": {
        "ValidAudiences": [
          "http://localhost:29754",
          "https://localhost:44360",
          "http://localhost:5276",
          "https://localhost:7253"
        ],
        "ValidIssuer": "dotnet-user-jwts",
        "SigningKeys": [
          {
            "Id": "ff20683d",
            "Issuer": "dotnet-user-jwts",
            "Value": "lDOFmIuEDelFKU0zAaLoT2qYOFDRZGDDTv5FyTa36V8=",
            "Length": 32
          }
        ]
      }
    }
  }
}

修改完成后實現(xiàn)相同的功能

JWT Token生成示例

app.MapGet("/login", (string UserName, string Password, [FromServices] IOptionsMonitor<JwtBearerOptions> optionsMonitor) =>
{
    // 1. 密碼驗證
    // TODO

    // 2. 生成  
    var parameters = optionsMonitor.Get(JwtBearerDefaults.AuthenticationScheme).TokenValidationParameters;
    var signingKey = parameters.IssuerSigningKeys.First();
    var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256Signature);
    var header = new JwtHeader(signingCredentials);
    var payload = new JwtPayload {
        { JwtRegisteredClaimNames.UniqueName, UserName },
        { JwtRegisteredClaimNames.Iss, parameters.ValidIssuers.First() },
        { JwtRegisteredClaimNames.Aud, parameters.ValidAudiences },
        { JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds() },
        { JwtRegisteredClaimNames.Nbf, DateTimeOffset.UtcNow.ToUnixTimeSeconds() },
        { JwtRegisteredClaimNames.Exp, DateTimeOffset.UtcNow.AddMinutes(30).ToUnixTimeSeconds() }
    };
    var jwtSecurityToken = new JwtSecurityToken(header, payload);
    var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
    var token = jwtSecurityTokenHandler.WriteToken(jwtSecurityToken);
    return token;
});

進(jìn)行一下驗證文章來源地址http://www.zghlxwxcb.cn/news/detail-748157.html

PS D:\Learn\MyJWT> curl.exe -i "http://localhost:5276/login?username=admin&password=1111"
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Mon, 04 Dec 2023 05:03:36 GMT
Server: Kestrel
Transfer-Encoding: chunked

eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImFkbWluIiwiaXNzIjoiZG90bmV0LXVzZXItand0cyIsImF1ZCI6WyJodHRwOi8vbG9jYWxob3N0OjI5NzU0IiwiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNjAiLCJodHRwOi8vbG9jYWxob3N0OjUyNzYiLCJodHRwczovL2xvY2FsaG9zdDo3MjUzIl0sImlhdCI6MTcwMTY2NjIxNiwibmJmIjoxNzAxNjY2MjE2LCJleHAiOjE3MDE2NjgwMTZ9.P9t7vIFfM7cddRPs4OQUTVVdo57nWTLt_ea2UynGUpo
PS D:\Learn\MyJWT>
PS D:\Learn\MyJWT>
PS D:\Learn\MyJWT> curl.exe -i -H "Authorization: Bearer eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImFkbWluIiwiaXNzIjoiZG90bmV0LXVzZXItand0cyIsImF1ZCI6WyJodHRwOi8vbG9jYWxob3N0OjI5NzU0IiwiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzNjAiLCJodHRwOi8vbG9jYWxob3N0OjUyNzYiLCJodHRwczovL2xvY2FsaG9zdDo3MjUzIl0sImlhdCI6MTcwMTY2NjIxNiwibmJmIjoxNzAxNjY2MjE2LCJleHAiOjE3MDE2NjgwMTZ9.P9t7vIFfM7cddRPs4OQUTVVdo57nWTLt_ea2UynGUpo" http://localhost:5276/secret
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Mon, 04 Dec 2023 05:03:50 GMT
Server: Kestrel
Transfer-Encoding: chunked

Hello admin. My secret

到了這里,關(guān)于在NET8中使用簡化的 AddJwtBearer 認(rèn)證的文章就介紹完了。如果您還想了解更多內(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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • Net8 EFCore Mysql 連接

    Net8 EFCore Mysql 連接

    一、安裝插件 Pomelo.EntityFrameworkCore.MySq (這里要選8.0.0以上版本低版本不支持.net8) 二、配置數(shù)據(jù)庫連接串 ?appsettings.json 中配置數(shù)據(jù)庫連接串 三、添加實體類Student和數(shù)據(jù)庫上下文 新建 Entities 目錄,在,根據(jù)表及字段,在目錄下新建 Student 實體類,在類上加 ?[Table(\\\"student\\\")] 表

    2024年02月22日
    瀏覽(24)
  • .NET8 Blazor新特性 流式渲染

    .NET8 Blazor新特性 流式渲染

    什么是SSR Blazor中的流式渲染結(jié)合了SSR(服務(wù)端渲染),服務(wù)端將HTML拼好返回給前端,有點像我們熟知的Razor Pages 或 MVC 。 當(dāng)已經(jīng)有了 Razor Pages 或 MVC 時,為什么還要選擇使用 Blazor 來實現(xiàn)這一點?這里有幾個原因。 首先,Razor Pages 和 MVC 沒有像Blazor這樣提供了很好的可重用組

    2024年02月05日
    瀏覽(34)
  • .NET8依賴注入新特性Keyed services

    什么是Keyed service Keyed service是指,為一個需要注入的服務(wù)定義一個Key Name,并使用使用Key Name檢索依賴項注入 (DI) 服務(wù)的機制。 使用方法 通過調(diào)用 AddKeyedSingleton (或 AddKeyedScoped 或 AddKeyedTransient)來注冊服務(wù),與Key Name相關(guān)聯(lián)?;蚴褂?[FromKeyedServices] 屬性指定密鑰來訪問已注冊

    2024年02月05日
    瀏覽(13)
  • .NET8 和 Vue.js 的前后端分離

    .NET8 和 Vue.js 的前后端分離

    在.NET 8中實現(xiàn)前后端分離主要涉及到兩個部分:后端API的開發(fā)和前端應(yīng)用的開發(fā)。后端API通常使用ASP.NET Core來構(gòu)建,而前端應(yīng)用則可以使用任何前端框架或技術(shù)棧,比如Vue.js、React或Angular等。下面是一個簡化的步驟指南,幫助你在.NET 8中實現(xiàn)前后端分離。 下面是一個簡單的示

    2024年04月10日
    瀏覽(21)
  • .Net8頂級技術(shù):邊界檢查之IR解析(二)

    .Net8頂級技術(shù):邊界檢查之IR解析(二)

    IR技術(shù)應(yīng)用在各個編程語言當(dāng)中,它屬于JIT的核心部分,確實有點點麻煩。但部分基本明了。本篇通過.Net8里面的邊界檢查的小例子了解下。前情提要,看這一篇之前建議看看前一篇:點擊此處,以便于理解。 1.前奏 先上C#代碼: Test函數(shù)經(jīng)過Roslyn編譯成IL代碼之后,會被JIT導(dǎo)

    2024年02月06日
    瀏覽(22)
  • .NET8 Blazor的Auto渲染模式的初體驗

    .NET8 Blazor的Auto渲染模式的初體驗

    .NET8發(fā)布后,Blazor支持四種渲染方式 靜態(tài)渲染,這種頁面只可顯示,不提供交互,可用于網(wǎng)頁內(nèi)容展示 使用Blazor Server托管的通過Server交互方式 使用WebAssembly托管的在瀏覽器端交互方式 使用Auto自動交互方式,最初使用 Blazor Server,并在隨后訪問時使用 WebAssembly 自動進(jìn)行交互式

    2024年02月05日
    瀏覽(26)
  • 快速部署外賣系統(tǒng):利用現(xiàn)代工具簡化開發(fā)流程

    快速部署外賣系統(tǒng):利用現(xiàn)代工具簡化開發(fā)流程

    在競爭激烈的外賣市場中,快速部署高效穩(wěn)定的外賣系統(tǒng)是餐飲企業(yè)成功的關(guān)鍵之一。本文將介紹如何利用現(xiàn)代工具簡化外賣系統(tǒng)的開發(fā)流程,并附帶代碼示例,幫助開發(fā)者快速搭建功能完備、用戶友好的外賣平臺。 在外賣業(yè)務(wù)快速增長的背景下,開發(fā)者需要快速交付穩(wěn)定的

    2024年02月14日
    瀏覽(16)
  • Blazor OIDC 單點登錄授權(quán)實例5 - 獨立SSR App (net8 webapp ) 端授權(quán)

    Blazor OIDC 單點登錄授權(quán)實例5 - 獨立SSR App (net8 webapp ) 端授權(quán)

    目錄: OpenID 與 OAuth2 基礎(chǔ)知識 Blazor wasm Google 登錄 Blazor wasm Gitee 碼云登錄 Blazor OIDC 單點登錄授權(quán)實例1-建立和配置IDS身份驗證服務(wù) Blazor OIDC 單點登錄授權(quán)實例2-登錄信息組件wasm Blazor OIDC 單點登錄授權(quán)實例3-服務(wù)端管理組件 Blazor OIDC 單點登錄授權(quán)實例4 - 部署服務(wù)端/獨立WASM端授

    2024年02月19日
    瀏覽(35)
  • Java開發(fā)中使用sql簡化開發(fā)

    Java開發(fā)中使用sql簡化開發(fā)

    使用sql語句簡化開發(fā) 引語:在Java開發(fā)中,我們更希望數(shù)據(jù)庫能直接給我們必要的數(shù)據(jù),然后在業(yè)務(wù)層面直接使用,所以寫一個簡單的sql語句有助于提高Java開發(fā)效率,本文由簡單到復(fù)雜。 使用MySQL數(shù)據(jù)庫,先創(chuàng)建一個簡單的表 開始玩吧,先看原始數(shù)據(jù) 以上原始數(shù)據(jù),是我們

    2024年02月16日
    瀏覽(30)
  • 重寫Sylar基于協(xié)程的服務(wù)器(0、搭建開發(fā)環(huán)境以及項目框架 || 下載編譯簡化版Sylar)

    重寫Sylar基于協(xié)程的服務(wù)器(0、搭建開發(fā)環(huán)境以及項目框架 || 下載編譯簡化版Sylar)

    重寫Sylar基于協(xié)程的服務(wù)器系列: 重寫Sylar基于協(xié)程的服務(wù)器(0、搭建開發(fā)環(huán)境以及項目框架 || 下載編譯簡化版Sylar) 重寫Sylar基于協(xié)程的服務(wù)器(1、日志模塊的架構(gòu)) 重寫Sylar基于協(xié)程的服務(wù)器(2、配置模塊的設(shè)計) 重寫Sylar基于協(xié)程的服務(wù)器(3、協(xié)程模塊的設(shè)計) 重寫

    2024年04月26日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包