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

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

 

一、建立API項目並運行。json

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

建立完成後的項目截圖服務器

 

 設置WebApplication1爲啓動項,運行起來後,默認訪問的是:http://localhost:5000/weatherforecastapp

能夠看到這個api返回了一些測試數據ide

 

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

二、首先添加nuget包:Microsoft.AspNetCore.Authentication.JwtBearer測試

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

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方法中,將身份驗證中間件添加到管道中,以便對主機的每次調用都將自動執行身份驗證。url

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了。

相關文章
相關標籤/搜索