网站建设平台合同,兰州seo网站建设,wordpress登录缓存,中文wordpress接上一篇#xff0c;众所周知一个网站的用户登录是非常重要#xff0c;一站式的登录#xff08;SSO#xff09;也成了大家讨论的热点。微软在这个Demo中#xff0c;把登录单独拉了出来#xff0c;形成了一个Service#xff0c;用户的注册、登录、找回密码等都在其中进行…接上一篇众所周知一个网站的用户登录是非常重要一站式的登录SSO也成了大家讨论的热点。微软在这个Demo中把登录单独拉了出来形成了一个Service用户的注册、登录、找回密码等都在其中进行。
这套service是基于IdentityServer4开发的 它是一套基于 .Net Core的OAuth2和OpenID框架这套框架目前已经很完善了我们可以把它使用到任何项目中。
我们先看下目录结构 frameborder0 scrollingno styleborder-width: medium; width: 470px; height: 421px;
从目录结构可以看出它是一套MVC架构的网站我们可以单独进行运行和调试当然我们也可以把它放进自己的项目中。
从.Net Core开始我们看代码的顺序从Web.config转到了Program.cs中我们来看下IdentityService的Program
public class Program
{ public static void Main(string[] args){var host new WebHostBuilder().UseKestrel().UseHealthChecks(/hc) //多了一个健康检查.UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartupStartup().Build();host.Run();}
}
跟普通的.Net Core项目类似不过多了一个UseHealthChecks从名字上也能看出这是一个对项目健康的检查有兴趣的话到时候我们另外开篇介绍。看完Program我们看下Startup
在初始化的时候我们看到的代码基本与系统相同多了一个加入builder.AddUserSecrets() 这是一个用户信息加密方法避免我们在提交共享项目的时候会把自己一些重要信息泄露有兴趣的朋友可以看下Secret Manager Tools。
在ConfigureServices中我们看到有一段代码
services.AddDataProtection(opts
{opts.ApplicationDiscriminator eshop.identity;
});
这段代码意思是加了一个唯一标示符给应用程序这在集群环境中是非常必要的我们可以通过这个唯一标识来判断是否是同一个应用我们的同一应用可能会分布在不同server上具体可以看园内大神的专题Asp.Net Core 数据保护
Going Down:
services.AddHealthChecks(checks
{var minutes 1; if (int.TryParse(Configuration[HealthCheck:Timeout], out var minutesParsed)){minutes minutesParsed;}checks.AddSqlCheck(Identity_Db, Configuration.GetConnectionString(DefaultConnection), TimeSpan.FromMinutes(minutes));
});
又是Health检查这次检查了与数据库连接的状态。
services.AddTransientIEmailSender, AuthMessageSender(); //邮件发送服务services.AddTransientISmsSender, AuthMessageSender(); //短信发送服务services.AddTransientILoginServiceApplicationUser, EFLoginService(); //EF 登录服务services.AddTransientIRedirectService, RedirectService(); //重定向服务//callbacks urls from config:Dictionarystring, string clientUrls new Dictionarystring, string();
clientUrls.Add(Mvc, Configuration.GetValuestring(MvcClient));
clientUrls.Add(Spa, Configuration.GetValuestring(SpaClient));
clientUrls.Add(Xamarin, Configuration.GetValuestring(XamarinCallback)); // Adds IdentityServerservices.AddIdentityServer(x x.IssuerUri null).AddSigningCredential(Certificate.Get()).AddInMemoryApiResources(Config.GetApis()).AddInMemoryIdentityResources(Config.GetResources()).AddInMemoryClients(Config.GetClients(clientUrls)).AddAspNetIdentityApplicationUser().Services.AddTransientIProfileService, ProfileService();
为identityserver4 进行相关配置。Startup中的Configure没什么特别的。
简单的看了下Identity项目好像就是教你怎么使用IdentityServer4So你可以在博客园中找到好多相关资料这里就不重复介绍了。
在这个service中发现了很多没有用到的类和属性估计是为了以后扩展用的吧。
例如
var user await _loginService.FindByUsername(model.Email);if (await _loginService.ValidateCredentials(user, model.Password))
{AuthenticationProperties props null; if (model.RememberMe){props new AuthenticationProperties{IsPersistent true,ExpiresUtc DateTimeOffset.UtcNow.AddYears(10)};};await _loginService.SignIn(user); // make sure the returnUrl is still valid, and if yes - redirect back to authorize endpointif (_interaction.IsValidReturnUrl(model.ReturnUrl)){ return Redirect(model.ReturnUrl);} return Redirect(~/);
} 这是AccountController用户登录的一段代码其中的props属性进行了设置但是在后面没有使用到因为是为以后支持持续化登录做的准备吧。还有在Services目录中的ProfileService在项目中也没有进行调用相信在后面的版本中会加上去的。
运行部署
了解了项目后我们再来进行运行和部署。
首先我们需要一台MSSQL Server因为我们需要保存用户数据建议用SQL 2008 update3以上为何用update3以上后面会说当然你也可以使用其他类型的数据库比如MySqlSqlite等。
其次把Identity项目设置为启动项目试着CtrlF5运行看看是否运行成功。 当你能在浏览器看到这个页面的时候说明程序运行正常配置也正确接下来看下如何在docker中运行。
1、右键项目-发布把项目编译发布到某个文件夹中。
2、打开你的终端如果是win10之前的系统请打开Docker Quickstart Terminal
我用的是win7使用的是Quickstart终端其他系统只要是使用linux container的都一样否则怎么叫“build once, run anywhere”呢。
3、在终端上先cd到你的发布目录如果不在同一个驱动器下的使用 /(driver)/ 代替driver:,例如我的项目发布在D:\Projects\publish cd /d/projects/publish
在你的终端看到输入处上一行有这个目录的说明你已经进入到这个目录了如 4、用ls查看下这个目录你会看到编译后的文件都在这里release在文件夹中你会看到dockerfile文件这个相当于docker的批处理文件我们看下内容具体如何写可以看博客园中其他大神的教程
FROM microsoft/aspnetcore:1.1
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT [dotnet, Identity.API.dll]
5、在终端运行docker build命令创建你的image请注意最后的“.”这个代表的当前目录
docker build -t identity:01 .
6、成功后我们使用docker images 可以查看如果在list中有identity的话说明我们创建成功了
7、run起来
docker run -p 8888:80 --name identity -d identity:01
ok所有操作完毕可以用我们的浏览器打开输入http://localhost:8888了 撒都没有撒情况
通过检查终于知道了原因我们使用的docker-toolbox所以它会借助于VritualBox来创建一个linux运行环境所以我们必须把虚拟机中的端口映射到我的本机 想着这下总归可以了吧谁知道。。。。。还是无法访问在quickstart中我输入了docker logs identity 看到如下日志 这什么鬼time out可我iis运行都是正常的啊不存在数据库连接不上的问题吧这个问题足足困扰了我2天晚上也睡不好第3天早上突然想到会不会linux容器的关系呢之前google的都是错误信息所以撒都没有搜出来我改了下关键字 linux containers connection sqlserver果不其然在一个issue中发现了答案
https://github.com/aspnet/EntityFramework/issues/4702#issuecomment-193382793
原来我们的sql2008没有支持这种登录request我们必须升级到update3才能解决这个问题为了让教程继续我购买了azure的1元试用更换了connection后我重新build和run终于看到了熟悉的页面 写在最后
在Identity Service中我们看到了一些新的东西比如secret manager tool,healthcheck等虽说它是基于identityServer4搭建的但至少它教会了我们如何使用identityServer4而且我们完全可以单独把它拉出来作为我们自己的user server我也是第一次接触IdentityServer4以后大家可以一起学习讨论下感觉非常强大。最后我们学习了如何单独搭建和部署identity service并使其能够在docker中正常运行。 相关文章
开篇有益-解析微软微服务架构eShopOnContainers一
原文地址http://www.cnblogs.com/inday/p/identity-service-eshoponcontainers.html.NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注