×

Hướng dẫn tích hợp Giao Thức OAuth 2.0 trong ASP.NET Core

 

OAuth 2.0 là một giao thức mở cho phép các ứng dụng truy cập tài nguyên trên một máy chủ bảo mật mà không cần phải chia sẻ thông tin đăng nhập. Dưới đây là cách sử dụng và tích hợp OAuth 2.0 trong ASP.NET Core.

Bước 1: Tạo một ứng dụng ASP.NET Core

Trước tiên, bạn cần tạo một ứng dụng ASP.NET Core mới. Bạn có thể làm điều này bằng cách sử dụng .NET CLI hoặc Visual Studio.

dotnet new mvc -n OAuthDemo
cd OAuthDemo

Bước 2: Cài đặt gói NuGet

Cài đặt các gói NuGet cần thiết cho việc tích hợp OAuth 2.0. Gói phổ biến nhất để làm việc với OAuth 2.0 trong ASP.NET Core là Microsoft.AspNetCore.Authentication.OAuth.

dotnet add package Microsoft.AspNetCore.Authentication.OAuth
dotnet add package Microsoft.AspNetCore.Authentication.Cookies

Bước 3: Cấu hình dịch vụ xác thực

Mở tệp Startup.cs và thêm cấu hình cho dịch vụ xác thực OAuth 2.0. Trong ví dụ này, chúng ta sẽ cấu hình Google OAuth 2.0.

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.Google;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

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

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddGoogle(options =>
        {
            options.ClientId = Configuration["Authentication:Google:ClientId"];
            options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
        });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

Bước 4: Thêm thông tin cấu hình

Thêm thông tin cấu hình cho Google OAuth vào tệp appsettings.json.

{
  "Authentication": {
    "Google": {
      "ClientId": "YOUR_GOOGLE_CLIENT_ID",
      "ClientSecret": "YOUR_GOOGLE_CLIENT_SECRET"
    }
  }
}

Bước 5: Tạo Controller và View để đăng nhập

Tạo một Controller để xử lý việc đăng nhập và đăng xuất.

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

public class AccountController : Controller
{
    public IActionResult Login()
    {
        return Challenge(new AuthenticationProperties { RedirectUri = "/" }, GoogleDefaults.AuthenticationScheme);
    }

    public async Task<IActionResult> Logout()
    {
        await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
        return RedirectToAction("Index", "Home");
    }
}

Tạo một View cho trang chủ với các liên kết đăng nhập và đăng xuất.

<!-- Views/Home/Index.cshtml -->
@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    @if (User.Identity.IsAuthenticated)
    {
        <p>Hello, @User.Identity.Name</p>
        <a href="/Account/Logout">Logout</a>
    }
    else
    {
        <a href="/Account/Login">Login with Google</a>
    }
</div>

Bước 6: Chạy ứng dụng

Bây giờ bạn có thể chạy ứng dụng bằng lệnh:

dotnet run

Mở trình duyệt và truy cập vào https://localhost:5001 (hoặc URL tương ứng với cấu hình của bạn). Bạn sẽ thấy các liên kết để đăng nhập với Google và đăng xuất.

Khi bạn nhấp vào liên kết đăng nhập, ứng dụng sẽ chuyển hướng đến Google để xác thực và sau khi đăng nhập thành công, bạn sẽ được chuyển hướng trở lại ứng dụng với trạng thái đăng nhập.

Kết luận

Bằng cách làm theo các bước trên, bạn có thể tích hợp OAuth 2.0 vào ứng dụng ASP.NET Core của mình để cho phép người dùng đăng nhập bằng tài khoản của bên thứ ba như Google. Bạn có thể mở rộng để hỗ trợ nhiều nhà cung cấp OAuth khác nhau như Facebook, Microsoft, Twitter, v.v. bằng cách cấu hình tương tự.

Comments