鉴权(Authentication)授权(Authorization)
简单的理解:鉴权衡量你能不能进一道门,授权是你进门了可以干什么
Cookie
| 1.HTTP无连接无状态,Cookie和Session就是解决此问题。 |
| 2.客户端向服务器端发送一个请求的时,服务端向客户端发送一个Cookie 然后浏览器将Cookie保存,之后每次HTTP请求浏览器都会将Cookie发送给服务器端,需要衡量把什么数据放到cookie中,很多数据并不是每次请求都需要发给服务端,网络开销,浪费带宽,最典型的放身份认证信息。 |
| 3.Cookie有两种保存方式,一种是浏览器会将Cookie保存在内存中,还有一种是保存在客户端的硬盘中。 |
| 4.Cookie的生存周期设置为负值 ,表示的是临时储存,不会写入cookie文件,只会存在浏览器内存中,且只会在打开的浏览器窗口或者子窗口有效,一旦浏览器关闭,cookie就会消失;Cookie的生存周期设置为 ‘0‘ ,表示仅在会话期间有效。 |
| 5.Cookie大小不能超过4kb,站点内不能超过20个,浏览器里面不能超过300个 |
Program.cs
| |
| #region Cookie |
| builder.Services.AddAuthentication("Cookies").AddCookie(o =>{ |
| o.LoginPath = "/api/Login/NoLogin"; |
| }); |
| #endregion |
TestController.cs
| [ApiController] |
| [Route("api/[controller]")] |
| public class TestController : ControllerBase |
| { |
| [Authorize] |
| [HttpGet] |
| public async Task<string> Get() |
| { |
| return await Task.FromResult(DateTime.Now.ToString()); |
| } |
| } |
LoginController.cs
| [ApiController] |
| [Route("api/[controller]/[action]")] |
| public class LoginController : ControllerBase |
| { |
| [HttpGet] |
| public async Task<string> NoLogin() |
| { |
| return "您还没有登录"; |
| } |
| [HttpGet] |
| public async Task<string> LoginSuccess(string userName, string password) |
| { |
| if (userName == "admin" && password == "123456") |
| { |
| ClaimsIdentity identity = new ClaimsIdentity("Ctm"); |
| identity.AddClaim(new Claim(ClaimTypes.Name, userName)); |
| identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, "1")); |
| await HttpContext.SignInAsync("Cookies", new ClaimsPrincipal(identity)); |
| return "登录成功"; |
| } |
| else |
| { |
| return "登录失败"; |
| } |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?