AntDesign Pro + .NET Core 实现基于JWT的登录认证功能

AntDesign Pro + .NET Core 实现基于JWT的登录认证功能攻略

本攻略将介绍如何使用AntDesign Pro和.NET Core实现基于JWT的登录认证功能。本攻略将提供详细的步骤和示例说明,以帮助您快速入门AntDesign Pro和.NET Core的登录认证功能。

步骤

步骤1:创建一个新的AntDesign Pro项目

首先,需要创建一个新的AntDesign Pro项目。可以使用以下命令在命令行中创建新的AntDesign Pro项目:

yarn create umi

在上面的命令中,使用 yarn create umi 命令创建一个新的AntDesign Pro项目。

步骤2:创建一个新的.NET Core项目

接下来,需要创建一个新的.NET Core项目。可以使用以下命令在命令行中创建新的.NET Core项目:

dotnet new webapi -n MyWebApi

在上面的命令中,使用 dotnet new 命令创建一个新的.NET Core Web API应用程序。使用 -n 参数指定项目的名称为 MyWebApi

步骤3:配置.NET Core项目

接下来,需要配置.NET Core项目以支持JWT身份验证。可以使用以下命令安装 Microsoft.AspNetCore.Authentication.JwtBearer 包:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

在上面的命令中,使用 dotnet add package 命令安装 Microsoft.AspNetCore.Authentication.JwtBearer 包。

接下来,可以在 Startup.cs 文件中添加以下代码:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

public void ConfigureServices(IServiceCollection services)
{
    // 添加身份验证服务
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = Configuration["Jwt:Issuer"],
                ValidAudience = Configuration["Jwt:Audience"],
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"]))
            };
        });

    // 添加授权服务
    services.AddAuthorization(options =>
    {
        options.AddPolicy("Admin", policy => policy.RequireClaim("Role", "Admin"));
        options.AddPolicy("User", policy => policy.RequireClaim("Role", "User"));
    });

    // 添加其他服务
    services.AddControllers();
}

在上面的代码中,我们添加了身份验证服务和授权服务,并配置了JWT身份验证参数。

步骤4:实现登录认证功能

接下来,需要实现登录认证功能。可以在.NET Core项目中创建一个名为 AuthController.cs 的文件,并添加以下代码:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

[ApiController]
[Route("[controller]")]
public class AuthController : ControllerBase
{
    private readonly IConfiguration _configuration;

    public AuthController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [AllowAnonymous]
    [HttpPost("login")]
    public IActionResult Login([FromBody] LoginModel login)
    {
        if (login == null)
        {
            return BadRequest("Invalid client request");
        }

        if (login.Username == "admin" && login.Password == "admin")
        {
            var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:SecretKey"]));
            var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);

            var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Name, login.Username),
                new Claim(ClaimTypes.Role, "Admin")
            };

            var tokeOptions = new JwtSecurityToken(
                issuer: _configuration["Jwt:Issuer"],
                audience: _configuration["Jwt:Audience"],
                claims: claims,
                expires: DateTime.Now.AddMinutes(5),
                signingCredentials: signinCredentials
            );

            var tokenString = new JwtSecurityTokenHandler().WriteToken(tokeOptions);
            return Ok(new { Token = tokenString });
        }

        return Unauthorized();
    }
}

public class LoginModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

在上面的代码中,我们创建了一个名为 AuthController 的控制器,并实现了一个名为 Login 的方法,该方法接受一个 LoginModel 对象作为参数,并返回一个JWT令牌。

步骤5:在AntDesign Pro中实现登录认证功能

接下来,需要在AntDesign Pro中实现登录认证功能。可以在 src/pages/User/Login.tsx 文件中添加以下代码:

import { LockOutlined, UserOutlined } from '@ant-design/icons';
import { Alert, message } from 'antd';
import React, { useState } from 'react';
import { connect, Dispatch, history } from 'umi';
import { LoginParamsType } from '@/services/login';
import LoginForm from './components/LoginForm';
import styles from './style.less';

interface LoginProps {
  dispatch: Dispatch;
  userLogin: any;
  submitting?: boolean;
}

const Login: React.FC<LoginProps> = (props) => {
  const { submitting } = props;
  const [loginError, setLoginError] = useState<string>('');

  const handleSubmit = (values: LoginParamsType) => {
    const { dispatch } = props;
    dispatch({
      type: 'login/login',
      payload: { ...values },
      callback: (response: any) => {
        if (response.status === 'ok') {
          localStorage.setItem('token', response.token);
          history.push('/');
        } else {
          setLoginError(response.message);
        }
      },
    });
  };

  return (
    <div className={styles.main}>
      <LoginForm onSubmit={handleSubmit}>
        {loginError && (
          <Alert
            message="登录失败"
            description={loginError}
            type="error"
            showIcon
            closable
          />
        )}
        <div className={styles.other}>
          <a href="">忘记密码</a>
          <a href="">注册账户</a>
        </div>
      </LoginForm>
    </div>
  );
};

export default connect(({ login, loading }: { login: any; loading: any }) => ({
  userLogin: login,
  submitting: loading.effects['login/login'],
}))(Login);

在上面的代码中,我们创建了一个名为 Login 的组件,并实现了一个名为 handleSubmit 的方法,该方法将调用后端API以获取JWT令牌,并将令牌存储在本地存储中。

示例说明

以下是两个示例说明,演示如何在AntDesign Pro和.NET Core中实现基于JWT的登录认证功能。

示例1:使用Postman测试API

以下是使用Postman测试API的步骤:

  1. 启动.NET Core项目。

在命令行中使用以下命令启动.NET Core项目:

dotnet run

在上面的命令中,使用 dotnet run 命令启动.NET Core项目。

  1. 使用Postman发送POST请求。

使用Postman发送以下POST请求:

POST http://localhost:5000/auth/login
Content-Type: application/json

{
    "username": "admin",
    "password": "admin"
}

在上面的请求中,我们向 http://localhost:5000/auth/login 发送了一个POST请求,并提供了用户名和密码。

  1. 检查响应。

如果用户名和密码正确,则应该收到以下响应:

```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsIlJvbGUiOiJBZG1pbiIsIm5iZiI6MTYyMzIwMjMwMCwiZXhwIjoxNjIzMjA2OTAwfQ.5JZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZJZ

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:AntDesign Pro + .NET Core 实现基于JWT的登录认证功能 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • C#中this的使用实例分析

    首先我们先来看一下C#中this关键字的作用。 在C#中,this关键字表示当前实例对象,它可以用来访问当前类的成员变量和方法。使用this关键字可以避免当前方法的局部变量和成员变量命名冲突的问题。 下面我们就来分析一下如何使用this关键字。 一、使用this关键字引用成员变量 在C#类中,如果存在成员变量和局部变量名字相同,为了避免变量混淆,可以使用th…

    C# 2023年6月7日
    00
  • C# 生转换网页为pdf

    下面我将详细讲解C#如何实现将网页转换为PDF的完整攻略,包括步骤和代码示例。 步骤1:下载使用合适的PDF组件 要生成PDF文件,我们需要使用PDF生成组件。C#中常用的PDF组件包括iTextSharp、PDFSharp以及Winnovative等。这里,我们以iTextSharp为例,进行讲解。 步骤2:创建一个PDF文档对象 在使用iTextShar…

    C# 2023年6月6日
    00
  • .NET Core系列之MemoryCache 缓存选项

    .NET Core系列之MemoryCache 缓存选项 在.NET Core中,MemoryCache是一种内存缓存,可用于缓存应用程序中的数据。MemoryCache提供了多种缓存选项,可以根据应用程序的需求进行配置。本攻略将介绍MemoryCache的缓存选项,包括缓存过期、缓存优先级、缓存回调等,并提供两个示例说明。 缓存过期 在MemoryCach…

    C# 2023年5月16日
    00
  • windows系统下,如何在C#程序中自动安装字体

    要在Windows系统下自动安装字体,可以在C#程序中使用System.Drawing.Text命名空间中的PrivateFontCollection和InstalledFontCollection类来实现。 具体步骤如下: 创建一个PrivateFontCollection对象,并使用AddFontFile方法向其中添加字体文件路径: using Syst…

    C# 2023年6月6日
    00
  • C#泛型概念的简介与泛型的使用

    C#泛型概念的简介与泛型的使用 什么是泛型? 泛型是C#中一种抽象的数据类型,它可以用于创建具有不同类型参数的可重用代码。在传统的数据类型中,只能通过指定数据类型来定义数据和方法。而泛型则可以在代码中定义一个泛型类型或方法,然后在创建实例时将其参数化,从而实现代码的通用性。 泛型类型定义非常灵活,可以定义任何类型的参数,例如引用类型、值类型或结构体等,还可以…

    C# 2023年6月7日
    00
  • C#实现简单学生成绩管理系统

    C#实现简单学生成绩管理系统 一、需求分析 本系统是一个简单的学生成绩管理系统,包括学生信息录入,成绩录入,成绩查询和统计等功能。软件运行需求:.Net Framework 4.0以上 二、技术选型 编程语言:C# 数据库:MS SQL Server 开发环境:Visual Studio 2017以上版本 三、数据库设计 本系统需要一个用于存储学生信息和成绩…

    C# 2023年6月3日
    00
  • Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结

    Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结 Kotlin是一种基于JVM的静态类型编程语言,被 Google 选定其为 Android 开发的官方编程语言,因为 Kotlin 代码更短、更简洁,同时具备 强类型检查 和 函数式编程 的特性。 在Kotlin中,我们可以学习到许多有关变量定义、函数扩展、Parcelable序…

    C# 2023年6月7日
    00
  • C#学习基础概念二十五问

    C#学习基础概念二十五问是一份用于初学者入门的C#教程,以下是详细的攻略: 目录结构 C#学习基础概念二十五问包含了C#的基础语法、面向对象编程、泛型、委托等知识点,其目录结构如下: 第1问 初学者如何在Windows上编写C#代码 第2问 什么是C#? 第3问 C#的基础语法之变量类型 第4问 C#的基础语法之运算符 第5问 C#的基础语法之流程控制语句 …

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部