文章是msdn的官方文档,链接在这里。其实也有中文的文档,这里还是想做一个记录。
文章有asp.net core 2.x 和1.x 版本,我这里就忽略1.x了。
下面先说几点额外的东西有助于理解。
Authentication 和 Authorization
这里先讲一下Authentication和Authorization两个词的区别。
Authentication:认证。
Authorization:授权。
简单来说,认证是用来证明一个人的身份,比如说他是一个学生,一个老师,一个boss,那么就需要这么一个认证。授权是用来表示这个用户能做什么事情,比如admin可以修改删除数据,normal user只能查看数据。
Issuer 和 Audience
Issuer:发行者,这里来说就是 cookie 是谁分发的。
Audience:听众,这个 cookie 的受众是谁。
正文
就像你前面看到认证相关的主题,Asp.net core Identity 是一个创建用户和维护用户登录的完备的认证解决方案。但有时你可能也想要自己的基于cookie的认证方式。你可以在不使用Asp.net core Identity的情况下使用cookie来实现一种独立的认证服务。
示例源码在这里。
因为我们这里只是做一个demo程序,所以写死一个假设的用户Maria Rodriguez到系统里面。邮箱相关的用户名是“maria.rodriguez@contoso.com”,密码任意。用户通过Pages/Account/Login.cshtml.cs文件中的AuthenticateUser方法做认证。现实环境中应该基于数据库。
更多如何从ASP.net Core 1.x 到2.0的信息参考这里.
想使用ASP.net Core Identity,参考这里.
配置
如果程序没有使用Microsoft.AspNetCore.App元程序包,给程序引用一下Microsoft.AspNetCore.Authentication.Cookies(版本≥2.1.0)。
在ConfigureServices中,通过Authentication和AddCookie方法添加一下认证服务。
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie();传给AddAuthentication的AuthenticationScheme值设置了程序默认使用的认证方案。
AuthenticationScheme在你有多个 cookie 认证实例或者你系统用某种特定的方案来做认证的时候是非常有用的。设置成为CookieAuthenticationDefaults.AuthenticationScheme就表示用‘Cookies’来作为一个方案。你可以设置任意的 string 类型的值来区分不同的方案。
在Configure方法中,使用UseAuthentication来调用认证中间件用于设置HttpContext.User属性。应在UseMvcWithDefaultRoute和UseMvc 方法之前调用UseAuthentication方法。
AddCookie 设置选项
大致是这么设置:
services .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.ClaimsIssuer = "test"; options.ClaimsIssuer = "aa"; //以及其他... });
