ASP.NET Core 2.0使用Cookie认证实现SSO单点登录
之前写了一个使用ASP.NET MVC实现SSO登录的Demo,
对于每个项目我们都需要在Configure和ConfigureServices两个方法中写一些代码,另外Portal和Order不提供登录功能,但是提供注销功能
注册认证中间件就一行代码
app.UseAuthentication();
这里关于认证中间件得说明一下,之前在1.0的时候提供了很多认证的中间件,什么Facebook啊,Google啊,这些中间价将全部弃用,统一使用上面的代码去注册身份认证中间件,具体的认证策略在服务中指定,比如下面的代码AddCookie()方法就指定了使用Cookie认证服务。
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(options => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; }).AddCookie(options => { options.Cookie.Domain = ".domain.dev"; options.Cookie.Name = "sso"; options.Cookie.Path = "/"; options.DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"c:\shared-auth-ticket-keys\")); }); services.AddMvc(); }
需要说明的是DataProtectionProvider属性提供数据保护,会在指定的目录下生成一个xml文件用里面的key去加密cookie。然后在页面上放一个登陆按钮
@if (Context.User.Identity.IsAuthenticated) { @Context.User.Identity.Name <a href="@Url.Action("SignOut")">注销</a> } else { <a class="btn btn-default" href="upload/201711301654156413.png" alt="" style="margin: 0px; padding: 0px; border: 0px; max-width: 100%;" />这里又得说明一下必须将项目发布以后才能部署到IIS,不能直接指定项目的物理路径,发到文件系统默认的路径应该是bin\Release\PublishOutput,应该指定这个路径
更新 2017-09-06:上面这句话说的有点绝对,不是一定要发布以后才能部署到IIS,事实上不用发布也可以在IIS中指定项目的根目录,请参考文章《
建议大家在本地开发的时候尽量合理的使用域名后缀
代码地址:https://github.com/bidianqing/SSO.Core.Samplehttp://www.cnblogs.com/bidianqing/p/7455627.html