LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

概述C#中的六种身份验证方法

admin
2024年10月17日 22:41 本文热度 235

前言

身份验证是保护应用程序的基础,并确保用户和系统在访问资源之前得到正确验证。经历多年,已经出现了多种认证方法,每种方法都应用在不同的安全需求与技术环境。本文介绍C#使用这几种身份验证方法。

六种方法

1、基本身份验证

基本身份验证(Basic Authentication)主要赖于用户及其拥有的密码,核心原理是通过比较用户输入的密码与预先存储的密码来确认用户身份。此方法是一种最基本的用户身份验证方式。如果我们把用户名和密码发送在HTTP请求头中编码,也免强可作为Web身份验证方法,但并不建议。由于其缺乏加密,且出现敏感数据,但它为理解C#中的身份验证提供了一个简单的起点。FTP 使用就是用户名和密码来验证。
下面为非测试示例,只为帮助理解:
using System;using System.Net;using System.Text;namespace Fountain.WinConsole.BasicDemo{    internal class Program    {        public static void Main()        {            string username = "admin";            string password = "admin6666";
            string url = "http://127.0.0.1/api/getOrderData";            string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
           WebClient client = new WebClient();            client.Headers[HttpRequestHeader.Authorization] = $"Basic {credentials}";
           string response = client.DownloadString(url);            Console.WriteLine(response);        }    }}

2、摘要认证

摘要认证(Digest Authentication)是对基本身份验证的改进,通过发送哈希凭据而不是账户密码,防止明文传输中账户密码的泄露,它为防止窃听攻击提供了更好的安全性。在C#中,摘要身份验证实现涉及更复杂的nonce值的散列和处理,通常使用专门的库或框架。(感兴趣可以查找相关内容了解

3、基于 Cookie 的身份验证

基于 Cookie 的身份验证是一种无状态的身份验证机制,它依赖于HTTP协议中的Cookie机制。成功登录后,服务器会生成一个包含用户身份信息的Cookie,并将其发送给用户的浏览器。在后续的请求中发送给服务器,用于识别用户的身份。
/// <summary>/// 登录/// </summary>public static void Login(){    WebRequest request = WebRequest.Create("http://127.0.0.1:8080/account/login");    request.Credentials = CredentialCache.DefaultCredentials;    string content = Convert.ToBase64String(Encoding.Default.GetBytes(string.Format("{0}:{1}", "admin", "admin666")));    request.Headers.Add("Authorization", "Basic " + content);    WebResponse webResponse = request.GetResponse();    string cookieStriing = webResponse.Headers.Get("Set-Cookie");}/// <summary>/// 获取订单/// </summary>public static string GetOrders(){    WebRequest request = WebRequest.Create("http://127.0.0.1:8080/order/getOrders");    request.Credentials = CredentialCache.DefaultCredentials;    request.Headers.Add("Cookie", cookieString);    WebResponse response = request.GetResponse();    return new StreamReader(response.GetResponseStream(), Encoding.Default).ReadToEnd();}

4、基于 Session 的身份验证

基于 Session 的身份验证是一种依赖于服务器端创建和管理用户会话。它的运行基于用户登录、创建会话、返回会话、保存会话、会话验证及会话过期与管理。
namespace Fountain.WebAPI.SessionDemo{    public class UsersController : Controller    {        /// <summary>        /// 登录        /// </summary>        /// <param name="username"></param>        /// <param name="password"></param>        /// <returns></returns>        public ActionResult Login(string username, string password)        {            if (username == "user" && password == "password")            {                // 存储用户会话                Session["username"] = username;                 return RedirectToAction("Index", "Home");            }            else            {                return View("Login");            }        }        /// <summary>        /// 操作        /// </summary>        /// <returns></returns>        public ActionResult Index()        {            if (Session["username"] != null)            {                // 用户已通过身份验证            }            else            {                // 用户身份验证失败            }        }    }}

5、基于 JWT的身份验证

JWT 是一种流行的基于令牌的API身份验证方法,它定义了一种紧凑和自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。此信息可以进行验证和信任,因为它是经过数字签名的。JWT 可以使用HMAC、RSA 或 ECDSA 的公钥/私钥对进行签名。以下是在C#中生成JWT的Token:

using System;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using Microsoft.IdentityModel.Tokens;
namespace Fountain.WinConsole.JWTDemo{    internal class Program    {        public static void Main()        {            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("supersecretkey"));            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);            // 生成Token            var token = new JwtSecurityToken(                issuer: "test.example.com",                audience: "test.example.com",                expires: DateTime.Now.AddMinutes(30),                 SigningCredentials = SigningCredentials,            );
           var tokenString = new JwtSecurityTokenHandler().WriteToken(token);            Console.WriteLine(tokenString);        }    }}

6、基于 API 密钥

API密钥是API请求中作为参数或标头传递的简单令牌,用于验证和授权应用程序,其原理与用户名和密码相似。它一般以单一密钥或一组多个密钥的形式出现。应用时,应该遵循最佳实践,改善整体安全性,以防止API密钥被盗并避免API密钥泄露的相关后果。
using System;using System.Net;using System.Text;
namespace Fountain.WinConsole.APIKeyDemo{    internal class Program    {        public static void Main()        {            string apiKey = "你的API KEY";            string url = "http://127.0.0.1/api/getOrderData";
           WebClient client = new WebClient();            client.Headers.Add("api-key", apiKey);
           string response = client.DownloadString(url);            Console.WriteLine(response);        }    }}

小结

了解身份验证方法对于构建安全可靠的应用程序至关重要,采用何种方法取决于安全要求、可扩展性和用户体验等因素。


该文章在 2024/10/19 12:11:51 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved