接上一篇《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"; }); }
在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(); }); }
打開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了。