91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IdentityServer4如何實現.Net Core API接口權限認證

發布時間:2021-05-17 11:29:16 來源:億速云 閱讀:179 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關IdentityServer4如何實現.Net Core API接口權限認證的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

什么是IdentityServer4

官方解釋:IdentityServer4是基于ASP.NET Core實現的認證和授權框架,是對OpenID Connect和OAuth 2.0協議的實現。

通俗來講,就是服務端對需要認證授權的資源(客戶端請求資源)在外層使用IdentityServer4框架進行封裝加殼,用戶只能通過獲取IdentityServer4頒發的Token令牌才能進行資源訪問。

下面開始進入正題,如何快速搭建實現API接口鑒權。

準備:1.下載準備NetCore sdk環境

2.本文開發環境為VS2019,部分代碼可能和之前的版本不同。

第一步,新建權限認證服務項目,本文以Net Core API項目模板為例(也可以選擇其他模板)

IdentityServer4如何實現.Net Core API接口權限認證

第二步,添加IdentityServer4 Nuget程序包。不同版本依賴的NetCoe sdk環境不同,需手動選擇合適版本。

IdentityServer4如何實現.Net Core API接口權限認證

這里提醒一下,有些同學的系統可能添加Nuget程序包時,發現無法找到程序包。我們這里找出了解決方法,點擊Nuget程序包添加頁面的右上角設置按鈕,看到如下頁面,手動添加如下的nuget.org,然后重新搜索即可。

IdentityServer4如何實現.Net Core API接口權限認證

第三步,添加IdentityServer4配置管理類。本文以用戶密碼授權模式為例。

public class Config
  {
    /// <summary>
    /// 定義資源范圍
    /// </summary>
    public static IEnumerable<ApiResource> GetApiResources()
    {
      return new List<ApiResource>
      {
        new ApiResource("api1", "我的第一個API")
      };
    }

    /// <summary>
    /// 定義訪問的資源客戶端
    /// </summary>
    /// <returns></returns>
    public static IEnumerable<Client> GetClients()
    {
      return new List<Client>
      {
        new Client{
          ClientId="client",//定義客戶端ID
          ClientSecrets=
          {
            new Secret("secret".Sha256())//定義客戶端秘鑰
          },
          AllowedGrantTypes=GrantTypes.ResourceOwnerPassword,//授權方式為用戶密碼模式授權,類型可參考GrantTypes枚舉
          AllowedScopes={ "api1"}//允許客戶端訪問的范圍

        }
       };
    }

    /// <summary>
    /// 這個方法是來規范tooken生成的規則和方法的。一般不進行設置,直接采用默認的即可。
    /// </summary>
    /// <returns></returns>
    public static IEnumerable<IdentityResource> GetIdentityResources()
    {
      return new IdentityResource[]
      {
        new IdentityResources.OpenId()
      };
    }
  }

第四步,Startup啟動類中注冊服務中間件

// This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
      services.AddIdentityServer()//注冊服務
        .AddDeveloperSigningCredential()
        .AddInMemoryApiResources(Config.GetApiResources())//配置類定義的授權范圍
        .AddInMemoryClients(Config.GetClients())//配置類定義的授權客戶端
        .AddTestUsers(new List<TestUser> { new TestUser { Username = "Admin", Password = "123456", SubjectId = "001", IsActive = true } });//模擬測試用戶,這里偷懶了,用戶可以單獨管理,最好不要直接在這里New
      services.AddControllers();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }

      app.UseIdentityServer();//添加中間件
      
      app.UseHttpsRedirection();

      app.UseRouting();

      app.UseAuthorization();

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

應用程序默認的端口號有兩種:1.http://localhost:5000 2.https://localhost:5001.

到這里,Identityserver4鑒權服務已經簡單搭建完成。我們直接在VS中啟動項目。并在端口號后面加上/.well-known/openid-configuration,出現如下頁面則表示配置成功。

IdentityServer4如何實現.Net Core API接口權限認證

第五步,PostMan模擬請求獲取token(當然這一步非必須,對postman感興趣的同學可以試一試)

我們都知道IdentityServer4需要客戶端先訪問鑒權服務獲取token令牌,才能進一步訪問加權的服務器資源。我們這里先通過PostMan模擬客戶端請求,獲取Token。(postman工具大家可以網上下載,也可以使用谷歌自帶的postman插件)

1.使用postman請求token時,有個地方需要注意下:

很多同學在使用https請求時,即請求https://localhost:5001,會發現無法成功。因為postman默認把SSL證書認證打開了,我們可以手動關閉掉。找到postman頁面右上方的小扳手圖標,進入設置頁面找到ssl關掉即可。當然同學們直接使用http://localhost:5000請求就無需設置SSL.

IdentityServer4如何實現.Net Core API接口權限認證

2.請求參數

這里的參數value就是我們在鑒權服務配置類設置的client和TestUser信息。

Grant_Type為授權類型,本文我們使用的是用戶密碼模式,所以這里填password.

IdentityServer4如何實現.Net Core API接口權限認證

這里我們看到,我們已成功模擬請求獲取了Token。大功告成,鑒權服務已驗證可用,我們趕緊去發布部署吧。

第六步,鑒權服務發布部署。

.Net Core發布模式有三種:

1.框架依賴+可移植

2.框架依賴+運行時環境(帶可執行程序exe)

3.獨立部署

簡單來說,框架依賴模式發布的程序包,都需要部署環境自帶.net core等運行環境;而獨立部署則不需要考慮,發布包已經包含了運行環境,直接部署即可。

下面本文以框架依賴+可移植發布,做簡單介紹。

IdentityServer4如何實現.Net Core API接口權限認證

發布完成后,我們會在發布路徑中看到程序dll.我們找到發布路徑,通過CMD命令窗口:dotnet xxx.dll可直接啟動。

IdentityServer4如何實現.Net Core API接口權限認證

如上,則表示啟動成功。(如果其他發布模式,直接雙擊發布包中可執行exe文件即可啟動)

鑒權服務部署完成后,我們API接口如何使用呢,下面開始正式介紹。

第一步:新建Web Api項目

IdentityServer4如何實現.Net Core API接口權限認證

添加Nuget程序包

IdentityServer4如何實現.Net Core API接口權限認證

第二步:配置啟動類

public void ConfigureServices(IServiceCollection services)
    {
      //注冊服務
      services.AddAuthentication("Bearer")
        .AddIdentityServerAuthentication(x =>
        {
          x.Authority = "http://localhost:5000";//鑒權服務地址
          x.RequireHttpsMetadata = false;
          x.ApiName = "api1";//鑒權范圍
        });
      services.AddControllers();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }
      app.UseAuthentication();//添加鑒權認證
      app.UseHttpsRedirection();
      app.UseRouting();
        app.UseAuthorization();
      app.UseEndpoints(endpoints =>
      {
        endpoints.MapControllers();
      }); 
    }

應用程序默認的端口號有兩種:1.http://localhost:5000 2.https://localhost:5001.為了避免端口號沖突被占用,我們可以在Program類中修改應用程序啟動端口號。

public static IHostBuilder CreateHostBuilder(string[] args) =>
      Host.CreateDefaultBuilder(args)
      
        .ConfigureWebHostDefaults(webBuilder =>
        {
          webBuilder.UseUrls("http://*:5555");//設置啟動端口號
          webBuilder.UseStartup<Startup>();
        });

第三步:創建API DEMO

[Route("api/[controller]")]
  [ApiController]
  public class TestController : ControllerBase
  {
    // GET: api/Test
    /// <summary>
    /// 方法加權
    /// </summary>
    /// <returns></returns>
    [Authorize]
    [HttpGet]
    public IEnumerable<string> Get()
    {
      return new string[] { "value1", "value2" };
    }

    /// <summary>
    /// 方法未加權 可直接訪問
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    // GET: api/Test/5
    [HttpGet("{id}", Name = "Get")]
    public string Get(int id)
    {
      return "value";
    }

    /// <summary>
    /// 開放獲取token API 接口
    /// </summary>
    /// <returns></returns>
    [HttpGet("GetToken")]
    public async Task<string> GetToken()
    {
      var client = new HttpClient();
      var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
      {
        Address = "http://localhost:5000/connect/token",
        ClientId = "client",
        ClientSecret = "secret",
        Scope = "api1",
        UserName = "Admin",
        Password = "123456",
      });

      if (tokenResponse.IsError)
      {
        return tokenResponse.Error;
      }

      return tokenResponse.AccessToken;

    }
  }

1.接口方法上加上:

[Authorize]

相當于對接口加權,只有被授權的用戶才能訪問(即獲取token的用戶)。此時上文中接口api/Test由于被加權,請求時會報錯;但是api/Test/1接口未加權,仍可正常請求。

那么我們如何才能訪問被加權的接口呢???Go Next

2.我們這里開放了獲取Token的接口GetToken(類似于上文中通過PostMan獲取Token)

訪問被加權的API接口,我們這里需要先請求獲取Token,然后請求加權接口時帶上token參數。

IdentityServer4如何實現.Net Core API接口權限認證

3.請求加權接口

IdentityServer4如何實現.Net Core API接口權限認證

請求加權接口時帶上Token,接口請求成功!

OK,關于如何快速開發和調試基于IdentityServer4框架的API接口鑒權服務,至此我們已介紹完畢。

小弟不才,本文中有考慮不周全或錯誤的地方,歡迎大家指正。

(如果有的同學想通過IIS部署API應用程序,這里有個地方需要注意下,需要在IIS(功能視圖——模塊)中添加AspNetCoreModule模塊。具體原因本文就不在這里介紹了。)

感謝各位的閱讀!關于“IdentityServer4如何實現.Net Core API接口權限認證”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

融水| 平阴县| 乐安县| 九龙城区| 日喀则市| 大足县| 德兴市| 扎鲁特旗| 手游| 高淳县| 射洪县| 辽源市| 西和县| 新乐市| 明溪县| 望城县| 来宾市| 禄丰县| 泾源县| 河西区| 天津市| 台北市| 仁布县| 洪雅县| 来安县| 勃利县| 裕民县| 革吉县| 龙门县| 九台市| 得荣县| 义马市| 华亭县| 丰城市| 藁城市| 沅江市| 洪洞县| 玉林市| 彰武县| 高州市| 凉山|