任务34:Cookie-based认证实现

用mvc来实现以下Cookie-Base的认证和授权的方式

新建一个web MVC的项目

在我的电脑的路径:D:\MyDemos\jesse

Ctrl+鼠标右键打开 CMD窗体创建一个项目

dotnet  new mvc --name MvcCookieAuthSample

默认带这Home的Controller

新建AdminController,把HomeController的内容赋值过去,进行修改,只保留一个Index的Action就可以了。

views下面创建Admin文件夹在下面创建Index.cshtml

赋值About.cshtml的内容进去简单修改一下

dotnet run 执行

打开地址访问admin

https://localhost:5001/admin

在admin加上验证

注意这里的命名空间是:

using Microsoft.AspNetCore.Authorization;

引入认证和授权Startup.cs内

引入Cookies的命名空间在VSCode中会报错。注意这里的命名空间的名称

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;

AddAuthentication里面要传一个Scheme

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);

CookieAuthenticationDefaults.AuthenticationScheme实际上是一个字符串的常量

这个常量实际上就是常量:Cookies

把Cookie添加进来。

 services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();

然后我们要在mvc之前,把这个middleware也添加进来。

否则我们的认证授权是不会生效的

app.UseAuthentication();

dotnet run 运行程序

这个时候我们打开地址:https://localhost:5001/admin/index

就会自动给我们跳转到:

https://localhost:5001/Account/Login?ReturnUrl=%2Fadmin%2Findex

也就是我们现在没法访问admin这个页面了。

接下来我们来模拟登录的过程

Controllers下新建:

AccountController.cs

SignInAsync第二个参数需呀传入CliamsPrincipal

Cliams在这个命名空间下面:

using System.Security.Claims;

新建Claim的List

  var cliams=new List<Claim>{
new Claim(ClaimTypes.Name,"wjw"),
new Claim(ClaimTypes.Role,"admin")
};

基于Cliams新建了Identity。ClaimsIdentity的第二个参数一定要给个authenticationType,否则我们的登陆就没有办法识别

在做一个LogOut的Action

修改为返回为ok,这样就是api了

dotnet watch run

我们先访问以下admin页面 ,访问不到

https://localhost:5001/admin

会自动跳转到:

https://localhost:5001/Account/Login?ReturnUrl=%2Fadmin

我们直接修改链接地址为:

https://localhost:5001/Account/Login

去访问,这样就实现了登陆了。

然后我们再次访问admin页面就可以访问到了

https://localhost:5001/admin

为了防止和默认的跳转的页面的url相同了。我们把Login修改为MakeLogin

我们先访问:退出

https://localhost:5001/Account/loginout

然后在访问admin

https://localhost:5001/admin

这样就访问不到了。

会自动跳转到:

https://localhost:5001/Account/Login?ReturnUrl=%2Fadmin

我们访问:执行登陆的操作

https://localhost:5001/Account/MakeLogin

会把我们的cookie设置好

再次访问admin的页面,这样就能成功访问到了。

https://localhost:5001/Admin

退出的操作

https://localhost:5001/Account/Loginout

修改默认跳转的页面地址:

访问:https://localhost:5001/admin

会自动跳转到:这样就实现了自动登陆

https://localhost:5001/Account/MakeLogin?ReturnUrl=%2Fadmin

我们再次访问admin就可以成功登陆了。

任务34:Cookie-based认证实现的更多相关文章

  1. ASP.NET CORE中使用Cookie身份认证

    大家在使用ASP.NET的时候一定都用过FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET会将用户名存储在Cook ...

  2. Web框架Danjgo之session cookie及认证组件

    一 Cookie 1 什么是Cookie Cookie翻译成中文是小饼干的意思.其实Cookie是key-value结构,类似于一个Python中的字典.随着服务器端的响应发送给客户端浏览器. 然后客 ...

  3. .Net Core权限认证基于Cookie的认证&授权.Scheme、Policy扩展

    在身份认证中,如果某个Action需要权限才能访问,最开始的想法就是,哪个Action需要权限才能访问,我们写个特性标注到上面即可,[TypeFilter(typeof(CustomAuthorize ...

  4. asp.net core 自定义401和异常显示内容(JWT认证、Cookie Base认证失败显示内容)

    asp.net core 2.0使用JWT认证园子里已经有挺多帖子了,但开发中发现认证未授权情况下返回的401状态码是没有任何信息的,业务中可能有需要返回一串错误的Json信息.在这里我分享一个自定义 ...

  5. cookie 用户认证

    客户端浏览器上的一个文件  可认为是键值对集合 基于浏览器的功能  可以实现一个用户验证的功能 因为要在页面上显示当前用户的信息 修改 写index urls 运行直接输入index时 会自动进入lo ...

  6. 任务31:课时介绍 & 任务32:Cookie-based认证介绍 &任务33:34课 :AccountController复制过来没有移除[Authorize]标签

    任务31:课时介绍 cookie-based网站这边的认证 jwt基于移动端和前后端分离的项目,jwt有一些独特的优势 jwt在asp.net core中的实现机制,了解实现机制并进行扩展.比如非标准 ...

  7. 使用cookie来做身份认证

    文章是msdn的官方文档,链接在这里.其实也有中文的文档,这里还是想做一个记录. 文章有asp.net core 2.x 和1.x 版本,我这里就忽略1.x了. 下面先说几点额外的东西有助于理解. A ...

  8. 使用cookie来做身份认证 转载https://www.cnblogs.com/sheldon-lou/p/9545726.html

    文章是msdn的官方文档,链接在这里.其实也有中文的文档,这里还是想做一个记录. 文章有asp.net core 2.x 和1.x 版本,我这里就忽略1.x了. 下面先说几点额外的东西有助于理解. A ...

  9. .Net Core 认证系统之Cookie认证源码解析

    接着上文.Net Core 认证系统源码解析,Cookie认证算是常用的认证模式,但是目前主流都是前后端分离,有点鸡肋但是,不考虑移动端的站点或者纯管理后台网站可以使用这种认证方式.注意:基于浏览器且 ...

随机推荐

  1. (CF)Codeforces445A DZY Loves Chessboard(纯实现题)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:http://codeforces.com/problemset/pro ...

  2. android开发之 Wifi的四个类

    android开发之 Wifi的四个类 在Android中对Wifi操作,android本身提供了一些实用的包,在android.net.wifi包以下.简介一下: 大致能够分为四个基本的类ScanR ...

  3. tcp三次握手和syn 洪水攻击

    1. 连接后,所有的 ack 为1才有效(连接后,ack 也一般都是1) 2. 建立连接3次握手, 如何确认对方收到了你发的包, seq 是自己发出去的,自己知道seq的值.所以怎么确认对方收到了自己 ...

  4. IntelliJ IDEA 默认需要进行maven的设置

    IntelliJ IDEA 默认需要进行maven的设置 需要指定maven的地址,指定settings.xml的地址: 可以默认的在user/.m2/下面放一个settings.xml文件: 学习: ...

  5. 【Android小项目】找不同,改编自&quot;寻找房祖名&quot;的一款开源小应用。

    近期在微信朋友圈"寻找房祖名"和"万里寻刀"这类小游戏比較火.我试着写了一个android版本号的,里面全是一系列的形近字,实现原理非常easy:用一个Grid ...

  6. SolidWorks如何绘制抽壳零件

    1 绘制一个零件,点击抽壳   2 你可以一个一个面选,也可以直接选中一个零件,对他的所有面都薄壳处理(右击弹出菜单选择确定即可)   3 可以用剖视图检查是否抽壳成功   4 对于复杂的零件,一个一 ...

  7. 【剑指offer】异或去重

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27568975 这篇文章没有代码.介绍的是纯理论的思路. 异或是一种基于二进制的位运算,用符 ...

  8. Redis相关知识

    Redis 存储的五种 字符串类型:string 一个String类型的value最大可以存储512M String是最常用的一种数据类型,普通的key/value存储. 散列类型:  hash 键值 ...

  9. Qt5官方demo解析集13——Qt Quick Particles Examples - Image Particles

    本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文 Qt5官方demo解析集12--Qt Quic ...

  10. UVa 12587 Reduce the Maintenance Cost(Tarjan + 二分 + DFS)

    题意:n个城市(n <= 10000), 有m条边(m <= 40000),每一个城市有一个维护费用Cost(i),除此之外,每条边的维修费用为去掉该边后不能通信的城市对数与边权的积.这个 ...