.NET 開源許可權認證專案 MiniAuth上線

小码编匠發表於2024-08-06

前言

在Web應用專案中許可權認證是個繞不開的話題,傳統方法複雜又耗時。MiniAuth推出專為.NET開發者設計的簡單、實用的許可權認證專案。

MiniAuth,作為ASP.NET Core的外掛,讓我們快速輕鬆實現使用者登入、許可權檢查等功能。它支援多種認證方式,如JWT、Cookie,且易於整合到現有專案中。

無論是開發WebAPI 還是MVC應用,MiniAuth都能幫助我們快速搭建起後臺管理系統。它簡單易用,不改變現有資料庫結構,也不增加學習成本。

MiniAuth,讓許可權管理不再繁瑣,快速開發更加高效。快來試試吧!

專案介紹

MiniAuth 一個輕量 ASP.NET Core Identity Web 後臺管理中間外掛。

「一行程式碼」為「新、舊專案」 新增 Identity 系統跟使用者、許可權管理網頁後臺系統。

開箱即用,避免打掉重寫或是嚴重耦合情況。

專案特點

  • 相容 : 支援 .NET identity Based on JWT, Cookie, Session 等
  • 簡單 : 拔插設計,API、MVC、Razor Page 等開箱即用
  • 支援多資料庫 : 支援 Oracle, SQL Server, MySQL 等 EF Core
  • 非侵入式 : 不影響現有資料庫、專案結構
  • 多平臺 : 支援 Linux, macOS 環境

專案使用

MiniAuth作為一個輕量級的ASP.NET Core Identity Web後臺管理外掛,其使用過程相對簡單直觀。

下面是一個基本的使用示例,幫助我們快速整合MiniAuth到ASP.NET Core專案中,具體步驟可以參考。

1、安裝MiniAuth

首先,需要透過NuGet包管理器安裝MiniAuth。

或者在Visual Studio中,開啟NuGet包管理器控制檯(或使用NuGet包管理器UI),並執行以下命令來安裝MiniAuth:

Install-Package MiniAuth

也可以使用.NET CLI,透過以下命令安裝:

dotnet add package MiniAuth

2、配置MiniAuth

安裝完成後,需要在ASP.NET Core專案的Startup類或Program類(取決於使用的.NET Core版本)中配置MiniAuth。

對於.NET 6 或更高版本,這通常在Program.cs檔案中完成配置

public class Program  
{  
    public static void Main(string[] args)  
    {  
        var builder = WebApplication.CreateBuilder(args);  
  
        // 新增MiniAuth服務  
        builder.Services.AddMiniAuth();  
  
        //如果需要自定義配置,如使用JWT認證,  
        builder.Services.AddMiniAuth(options =>  
        {  
            options.AuthenticationType = MiniAuthOptions.AuthType.BearerJwt;  
            options.JWTKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("自己的JWT金鑰"));  
        });  
  
        var app = builder.Build();  
  
        // 其他配置...  
        app.Run();  
    }  
}

3、訪問管理頁面

配置完成後,執行當前專案。MiniAuth將自動註冊必要的路由和中介軟體,並提供一個預設的管理介面。

你可以透過訪問以下URL來訪問管理介面(請根據實際部署情況替換localhost:5000):

http://localhost:5000/miniauth/index.html

首次訪問時,可以使用預設的管理員賬號

賬號: admin@mini-software.github.io

密碼: E7c4f679-f379-42bf-b547-684d456bc37f (請記得修改密碼)

即可管理你的 Identity 使用者、角色、端點。

4、許可權管理

MiniAuth提供了使用者、角色和許可權的管理功能。可以透過管理介面來建立新使用者、分配角色以及管理許可權。

對於需要許可權控制的API或頁面,可以在相應的控制器或方法上使用[Authorize]屬性或[Authorize(Roles = "角色名")]屬性來限制訪問。

5、自定義和擴充套件

MiniAuth提供了靈活的擴充套件點,可以根據專案需求進行自定義。透過實現或擴充套件MiniAuth提供的介面和類來定製認證流程、使用者資料儲存等。

  • MiniAuth Cookie Identity

MiniAuth 預設為單體 Coookie Based identity,如前後端分離專案請更換 JWT 等 Auth。

  • MiniAuth JWT Identity

指定 AuthenticationType 為 BearerJwt

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMiniAuth(options:(options) =>
{
    options.AuthenticationType = AuthType.BearerJwt;
});

請記得自定義 JWT Security Key,如:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMiniAuth(options: (options) =>
{
    options.JWTKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("6ee3edbf-488e-4484-9c2c-e3ffa6dcbc09"));
});
  • MiniAuth 預設模式

為IT Admin 集中使用者管理,使用者註冊、密碼重置等操作需要 Admin 許可權賬號操作,預設 Role = miniauth-admin

  • 關閉 MiniAuth Login

如果你只想用自己的登入邏輯、頁面、API,可以指定登入路徑,關閉開關

// 放在 service 註冊之前
builder.Services.AddMiniAuth(options: (options) =>
{
    options.LoginPath = "/Identity/Account/Login";
    options.DisableMiniAuthLogin = true;
});
  • 自定義預設的 SQLite Connection String
builder.Services.AddMiniAuth(options: (options) =>
{
    options.SqliteConnectionString = "Data Source=miniauth_identity.db";
});
  • 自定義資料庫、使用者、角色

MiniAuth 系統預設使用 SQLite EF Core、IdentityUser、IdentityRole開箱即用 如果需要切換請在 app.UseMiniAuth 泛型指定不同的資料庫、自己的使用者、角色類別。

app.UseMiniAuth<YourDbContext, YourIdentityUser, YourIdentityRole>();

注意事項

1、確保專案已經安裝了ASP.NET Core Identity相關的包,因為MiniAuth是基於ASP.NET Core Identity構建的。

2、根據專案需求,選擇合適的認證方式(如JWT、Cookie等)。

3、注意順序,請將 UseMiniAuth 放在路由生成之後,否則系統無法獲取路由資料作許可權判斷,如 :

app.UseRouting();
app.UseMiniAuth();

4、請新增 Role 規則

請新增 AddRoles<IdentityRole>(),否則 [Authorize(Roles = "許可權")] 不會生效

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddRoles<IdentityRole>() // ❗❗❗ 
    .AddEntityFrameworkStores<ApplicationDbContext>();

專案地址

Github:https://github.com/mini-software/MiniAuth

Gitee:https://gitee.com/dotnetchina/MiniAuth

如果你覺得這篇文章對你有幫助,不妨點個贊支援一下!你的支援是我繼續分享知識的動力。如果有任何疑問或需要進一步的幫助,歡迎隨時留言。

也可以加入微信公眾號 [DotNet技術匠] 社群,與其他熱愛技術的同行一起交流心得,共同成長!

相關文章