上篇Linux+.NetCore+Nginx搭建集群 有朋友提及到如果nginx做集群后应该还会有下一篇文章主讲session控制,一般来说就是登陆;本篇分享的内容不是关于分布式session内容,而是netcore自带的授权Authorize,Authorize粗略的用法,希望能对大家有好的帮助;
web网站session和cookie关系
在NetCore中使用Authorize登陆
web网站session和cookie关系
要说session和cookie关系,恐怕有很多文章都有说过,这里我只阐述下自己的理解,尽可能的做到通俗易懂;对于session往往存储于服务端,登陆的话session一般会存储登陆用户的基本信息,还有个会话唯一sessionId(以下简称:token),这个token会分配到每个用户头上,服务端根据用户请求的token来识别服务端存储的登陆信息,以此达到登陆的目的;
客户端要传递这个同样的token,必须要存储起来,这就要用到咋们说的cookie,客户端用cookie来存储token,cookie拥有过期时间特性能够很好的做到登录失效的效果(尽管session也有),往往在分布式的时候cookie和session的失效时间都会设置,只要某一个时间过期了将视为需要重新登录或者需要重新设置cookie;下面将截图在谷歌浏览器下某个网站的cookie存储图:
能够看出cookie存储就是key-value的方式,唯一的名字+value;
在.NetCore中使用Authorize登陆
对于Authorize经常使用mvc的朋友肯定不陌生,在core中使用Authorize登录首先需要在Starup.cs的ConfigureServices方法中配置下,这里我直接给出粗略的配置吧(满足登录):
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//配置authorrize
services.AddAuthentication(b =>
{
b.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
b.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
b.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).
AddCookie(b =>
{
//登陆地址
b.LoginPath = "/login";
//sid
b.Cookie.Name = "My_SessionId";
// b.Cookie.Domain = "shenniu.core.com";
b.Cookie.Path = "/";
b.Cookie.HttpOnly = true;
b.Cookie.Expiration = new TimeSpan(0, 0, 30);
b.ExpireTimeSpan = new TimeSpan(0, 0, 30);
});
}
下面简单说明下cookie的属性效果:
b.Cookie.Name:就是cookie的名字,对应第一小节谷歌浏览器截图的Name;
b.LoginPath:设置登陆失败或者未登录授权的情况下,直接跳转的路径这里,这是/login;
b.Cookie.Domain:指定cookie对应的域名,这里我没域名和没设置本地host所以屏蔽,屏蔽的或默认localhost;
b.Cookie.HttpOnly:设置cookie只读情