ASP.NET Core3.1使用IdentityServer4中間件系列隨筆(二):創建API項目,配置IdentityServer保護API資源


配套源碼:https://gitee.com/jardeng/IdentitySolution

 

接上一篇《ASP.NET Core3.1使用IdentityServer4中間件系列隨筆(一):搭建認證服務器

 

1、創建API項目並運行。

使用API模板,API模板中自帶了一個示例。

創建完成后的項目截圖

 

 設置WebApplication1為啟動項,運行起來后,默認訪問的是:http://localhost:5000/weatherforecast

可以看到這個api返回了一些測試數據

 

此時API沒有受保護,可以任意訪問,接下來配置IdentityServer來保護API。

2、首先添加nuget包:Microsoft.AspNetCore.Authentication.JwtBearer

 3、在Startup.cs類ConfigureServices方法中,將身份驗證服務添加到DI並配置Bearer為默認方案。

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    //將身份驗證服務添加到DI並配置Bearer為默認方案。
    services.AddAuthentication("Bearer")
        .AddJwtBearer("Bearer", options =>
        {
            options.Authority = "http://localhost:5000";
            options.RequireHttpsMetadata = false;
            options.Audience = "api1";
        });
}
View Code

在Configure方法中,將身份驗證中間件添加到管道中,以便對主機的每次調用都將自動執行身份驗證。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    //將身份驗證中間件添加到管道中,以便對主機的每次調用都將自動執行身份驗證。
    app.UseAuthentication();
    //授權中間件,以確保匿名客戶端無法訪問我們的API端點。
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}
View Code

打開launchSettings.json,將項目啟動端口改成6000,因為跟IdentityServer授權服務器項目端口沖突了。

 

 

 在需要被保護的API控制器上添加[Authorize]特性,指定應用此屬性的類或方法需要指定的授權。添加到控制器上表示訪問整個控制器的所有方法都需要授權,添加到某個方法上表示訪問僅此方法需要授權。

 

啟動項目,我們看到此時接口訪問不了了。

 

這里使用Postman來進行接口測試,出現401錯誤代碼即未授權。說明我們的API已經受保護了。

現在我們將IdentityServer認證服務器項目啟動起來,因為在同一個解決方案中,所以直接到bin/Debug/netcoreapp3.1目錄下直接運行。

 

 

在上一篇中,我們添加了一個客戶端,使用了認證模式為客戶端憑證(ClientCredentials)

 

那么我們就使用這種認證方式去請求token,得到token就可以訪問api了

先請求地址:http://localhost:5000/connect/token 獲取token,使用POST請求,client_id、client_secret、grant_type都與上圖一一對應。

 

 然后拿着獲取到的access_token去訪問api,只需要在請求頭Headers中添加參數:Authorization,值為:Bearer+空格+access_token,可以看到已經能成功訪問到被保護的API了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM