部署一个安全的ASP.NET MVC 5应用程序成员、OAuth和SQL Azure网站数据库
来源:互联网 发布:centos php 编辑:程序博客网 时间:2024/04/30 12:10
部署一个安全的ASP.NET
MVC 5应用程序成员、OAuth和SQL Azure网站数据库
更新: 10/14/2014
2014年10月12日更新。
本教程向您展示了如何构建一个安全的ASP.NET MVC 5 web应用程序允许用户登录凭证从Facebook和谷歌。 您还将应用程序部署到Azure。
你可以免费开一个蔚蓝的账户,如果你不已经有Visual Studio 2013中,SDK自动安装Visual Studio 2013网络表达。 你可以开始开发免费Azure。
本教程假设您使用Azure没有经验。 完成本教程之后,您将有一个安全的数据驱动的web应用程序启动并运行在云中使用云数据库。
你将学习:
- 如何创建一个安全的ASP。 净MVC 5项目和发布Azure网站。
- 如何使用 OAuth 和ASP。 网会员数据库安全的应用程序。
- 如何使用SQL数据库在Azure存储数据。
您将构建一个简单的联系人列表是基于ASP的web应用程序。 净MVC 5和使用ADO。 净实体框架数据库访问。 下面的插图显示了完成应用程序的登录页面:
注意:
要完成本教程,您需要一个微软Azure帐户。 如果你没有一个帐户,您可以 激活你的MSDN订户的好处 或 注册一个免费试用 。 如果你想开始使用Azure网站注册一个账户之前,去 https://trywebsites.azurewebsites.net ,你可以立即创建一个短暂的ASP。 净启动网站Azure网站免费。 不需要信用卡,没有承诺。
在本教程中:
- 设置开发环境
- 创建一个ASP。 净MVC 5应用程序
- 将应用程序部署到Azure
- 添加一个数据库应用程序
- 添加一个OAuth提供者
- 将应用程序部署到Azure
- 下一个步骤
设置开发环境
首先,通过安装设置开发环境 Azure SDK Visual Studio 2013 。
如果你没有安装Visual Studio,Visual Studio表达Web将安装SDK。
注意:
取决于有多少的SDK依赖您已经在您的机器上,安装SDK可能需要很长时间,从几分钟到半小时或更多。
为本地主机使用新的SSL证书,您将需要安装 Visual Studio 2013更新3 或更高版本。
创建一个ASP。 净MVC 5应用程序
创建项目
从 文件 ”菜单上,单击“ 新项目 。
在 新项目 对话框,扩大 c# 并选择 网络 下 安装模板 ,然后选择 ASP。 净的Web应用程序 。
名称的应用程序 ContactManager 并点击 好吧 。
注意: 确保你进入“ContactManager”。 代码块,后来你会复制假设ContactManager项目名称。
在 新的ASP。 网项目 对话框,选择 MVC 模板。 验证 身份验证 被设置为 个人用户账户*,* *主机在云里 检查和 网站 被选中。
配置向导将显示基于一个独特的名字 ContactManager (见下图)。 选择一个你附近的地区。 您可以使用 azurespeed.com 找到最低的延迟数据中心。
如果您以前没有创建一个数据库服务器,选择 创建新的服务器 ,输入数据库用户名和密码。
如果你有一个数据库服务器,用它来创建一个新的数据库。 数据库服务器是一个宝贵的资源,你通常需要创建多个数据库在同一台服务器上测试和开发,而不是每个数据库创建一个数据库服务器。 确保你的网站和数据库是在同一地区。
设置页眉和页脚
在 解决方案资源管理器 打开 Views\Shared 文件中的Layout.cshtml 。
取代的标记 Layout.cshtml 用下面的代码文件。 下面突出显示的更改。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - Contact Manager</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> @Html.ActionLink("CM Demo", "Index", "Cm", new { area = "" }, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> </ul> @Html.Partial("_LoginPartial") </div> </div> </div> <div class="container body-content"> @RenderBody() <hr /> <footer> <p>© @DateTime.Now.Year - Contact Manager</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
本地运行应用程序
按CTRL + F5运行应用程序。
应用程序主页出现在默认浏览器。
这是所有您需要做的现在来创建应用程序,您将部署到Azure。
为项目启用SSL
启用SSL。 在解决方案资源管理器中,单击 ContactManager 项目,然后单击F4弹出属性对话框。 改变 启用SSL 为true。 复制 SSL URL 。 SSL URL https://localhost:44300 /除非你之前创建SSL网站。
在解决方案资源管理器,右键单击 联系经理 项目,然后单击 属性 。
在左边选项卡,点击 网络 。
改变 项目的Url 使用 SSL URL 并保存页面(控制)。
验证Internet Explorer浏览器Visual Studio启动,下图所示:
浏览器选择器允许您指定Visual Studio启动浏览器。
您可以选择多个浏览器和Visual Studio更新每个浏览器当你做出改变。 更多信息见 在Visual Studio 2013中使用浏览器链接 。
按CTRL + F5运行应用程序。 按照说明信任IIS Express已生成自签名证书。
阅读 安全警告 对话框,然后单击 是的 如果你想要安装证书代表 本地主机 。
即显示了 首页 SSL页面并没有警告。
Google Chrome还接受证书和将显示HTTPS内容没有警告。 Firefox使用自己的证书存储,因此它将显示一个警告。
将应用程序部署到Azure
在Visual Studio中,右键单击项目 解决方案资源管理器 并选择 发布 从上下文菜单中。
的 发布网站 向导打开。
在 发布网站 对话框中,单击 发布 。
现在创建的应用程序在云中运行。 下次你部署应用程序,只有改变(或新的)文件将被部署。
添加一个数据库应用程序
接下来,您将更新应用程序添加的能力显示和更新联系人并将数据存储在数据库中。 应用程序将使用实体框架(EF)创建数据库,读取和更新数据。
为联系人添加数据模型类
您首先创建一个简单的数据模型的代码。
在 解决方案资源管理器 模型,右键单击文件夹,单击 添加 ,然后 类 。
在 添加新项 对话框中,新的类文件的名字 Contact.cs ,然后单击 添加 。
替换的内容联系。 用下面的代码cs文件。
using System.ComponentModel.DataAnnotations;using System.Globalization;namespace ContactManager.Models{ public class Contact { public int ContactId { get; set; } public string Name { get; set; } public string Address { get; set; } public string City { get; set; } public string State { get; set; } public string Zip { get; set; } [DataType(DataType.EmailAddress)] public string Email { get; set; } }}
的 联系人 类定义数据将存储为每个接触,再加上一个主键, contactid 所需的数据库。
创建网页,使应用程序用户的联系人
ASP.NET MVC脚手架功能可以自动生成代码,执行创建、读取、更新和删除(CRUD)操作。
添加一个控制器和一个视图的数据
- 构建项目 (Ctrl + Shift + B) 。 (你必须构建项目之前使用脚手架机制。)
在 解决方案资源管理器 ,右键单击控制器文件夹并单击 添加 ,然后单击 控制器 。
在 增加支架 对话框,选择 5 MVC控制器与视图、使用EF 然后点击 添加 。
在 模型类 下拉框中,选择 接触(ContactManager.Models) 。 (见下图)。
在 数据上下文类 中,选择 ApplicationDbContext(ContactManager.Models) 。 的 ApplicationDbContext 将用于会员DB和我们的联系资料。
在 控制器名称 文本输入框中,输入“CmController”控制器的名称。
点击 添加 。
Visual Studio创建一个控制器为CRUD方法和视图的数据库操作 联系 对象。
启用迁移,创建数据库,添加示例数据和数据初始化
下一个任务是启用的 代码首先迁移 功能,以创建数据库基于数据模型创建。
在 工具 菜单中,选择 Nuget包管理器 然后 包管理器控制台 。
在 包管理器控制台 窗口中,输入以下命令:
enable-migrations
的 enable-migrations 命令创建一个 Migrations文件夹,并将在该文件夹 Configuration.cs 文件,您可以编辑种子数据库和配置迁移。
在 包管理器控制台 窗口中,输入以下命令:
add-migration Initial
的 add-migration初始 命令生成一个文件命名 < date_stamp >初始 在 Migrations文件夹中创建数据库。 第一个参数( 最初的 )是任意的,是用来创建文件的名称。 你可以看到新的类文件 解决方案资源管理器 。 在 最初的 类, 了 方法创建联系人表, 下来 使用方法(当您想要返回到以前的状态)下降。
打开 Migrations\ Configuration.cs 文件。
添加以下名称空间。
using ContactManager.Models;
取代 seed 方法用下面的代码:
protected override void Seed(ContactManager.Models.ApplicationDbContext context){ context.Contacts.AddOrUpdate(p => p.Name, new Contact { Name = "Debra Garcia", Address = "1234 Main St", City = "Redmond", State = "WA", Zip = "10999", Email = "debra@example.com", }, new Contact { Name = "Thorsten Weinrich", Address = "5678 1st Ave W", City = "Redmond", State = "WA", Zip = "10999", Email = "thorsten@example.com", }, new Contact { Name = "Yuhong Li", Address = "9012 State st", City = "Redmond", State = "WA", Zip = "10999", Email = "yuhong@example.com", }, new Contact { Name = "Jon Orton", Address = "3456 Maple St", City = "Redmond", State = "WA", Zip = "10999", Email = "jon@example.com", }, new Contact { Name = "Diliana Alexieva-Bosseva", Address = "7890 2nd Ave E", City = "Redmond", State = "WA", Zip = "10999", Email = "diliana@example.com", } );}
这段代码初始化(种子)联系信息的数据库。 播种数据库的更多信息,请参阅 播种和调试实体框架(EF)星展 。
在 包管理器控制台 输入命令:
update-database
update-database就 是运行第一个创建数据库的迁移。 默认情况下,创建数据库SQL Server Express LocalDB数据库。
按CTRL + F5运行应用程序,然后单击 CM演示 链接,或者导航到 http://localhost:(port#)/Cm.
应用程序显示了种子数据,并提供编辑、细节和删除链接。 您可以创建、编辑、删除和查看数据。
添加一个OAuth2提供者
OAuth 是一个开放的协议,它允许在一个简单的安全授权和标准方法从网络,移动和桌面应用程序。 ASP.NET MVC互联网模板使用OAuth暴露Facebook,Twitter,谷歌和微软作为身份验证提供者。 尽管本教程只使用谷歌身份验证提供者,您可以很容易地修改代码来使用这些供应商。 实现其他供应商的步骤非常类似于本教程中的步骤,您将看到。 使用Facebook作为身份验证提供者,看到我的教程 MVC 5应用程序与Facebook、Twitter、LinkedIn和谷歌OAuth2登录 。
除了验证,本教程还将使用角色来实现授权。 只有那些你添加到用户 canEdit 角色可以更改数据(即,创建、编辑或删除联系人)。
按照说明在我的教程 MVC 5应用程序与Facebook、Twitter、LinkedIn和谷歌OAuth2登录 下 创建一个Google app OAuth 2建立OAuth2 Google app 。 运行和测试应用程序来验证您可以登录使用谷歌身份验证。
使用会员API
在本节中,您将添加一个本地用户和 canEdit 会员数据库的角色。 只有那些用户 canEdit 角色能够编辑数据。 最佳实践是名角色他们可以执行的行动 canEdit优先考虑在一个角色叫什么 管理 。 当你的应用程序的发展可以添加新的角色等 canDeleteMembers 而不是更少的描述性 superadmin 。
打开 migrations\ Configuration.cs 文件,并添加以下
使用
声明:using Microsoft.AspNet.Identity;using Microsoft.AspNet.Identity.EntityFramework;
添加以下 AddUserAndRole 方法的类:
bool AddUserAndRole(ContactManager.Models.ApplicationDbContext context) { IdentityResult ir; var rm = new RoleManager<IdentityRole> (new RoleStore<IdentityRole>(context)); ir = rm.Create(new IdentityRole("canEdit")); var um = new UserManager<ApplicationUser>( new UserStore<ApplicationUser>(context)); var user = new ApplicationUser() { UserName = "user1@contoso.com", }; ir = um.Create(user, "P_assw0rd1"); if (ir.Succeeded == false) return ir.Succeeded; ir = um.AddToRole(user.Id, "canEdit"); return ir.Succeeded; }
调用的新方法 种子 方法:
protected override void Seed(ContactManager.Models.ApplicationDbContext context) { AddUserAndRole(context); context.Contacts.AddOrUpdate(p => p.Name, // Code removed for brevity }
下面的图片显示了更改 种子 方法:
这段代码创建了一个新的角色 canEdit ,创建一个新的本地用户 user1@contoso.com ,增加了 user1@contoso.com 到 canEdit 的角色。 有关更多信息,请参见ASP。 网络身份资源页面 。
使用临时代码添加新的社会化登录用户canEdit角色
在这个章节中,你将会暂时修改 ExternalLoginConfirmation 方法帐户控制器添加新用户注册的OAuth提供者 canEdit 的角色。 我们将暂时修改ExternalLoginConfirmation 方法自动添加新用户一个管理角色。 直到我们提供一个工具来添加和管理角色,我们将使用以下临时自动注册码。 我们希望提供一个类似的工具 WSAT 在未来它允许您创建和编辑用户帐号和角色。 后来在本教程中,我将向您展示如何使用 服务器资源管理器 将用户添加到角色。
- 打开 控制器\ AccountController.cs 文件并导航到 ExternalLoginConfirmation 方法。
添加以下调用 AddToRoleAsync 就在 SignInAsync 调用。
await UserManager.AddToRoleAsync(user.Id, "canEdit");
上面的代码将新注册用户添加到“canEdit”的角色,这使行动改变(编辑)数据的方法。 一个图像的代码改动如下所示:
在之后的教程中,您将应用程序部署到Azure,你将与谷歌或其他第三方登录身份验证提供者。 这将添加你的新注册的账户 canEdit 的角色。 人发现你的网站的URL和一个Google ID可以注册和更新您的数据库。 防止别人这样做,您可以停止这个网站。 你可以验证的 canEdit 通过检查数据库中的作用。
在 包管理器控制台 按向上箭头键,弹出下面的命令:
Update-Database
运行 Update-Database就是命令将运行 种子 方法,将运行 AddUserAndRole 你只是补充道。 的 AddUserAndRole 将创建用户 user1@contoso.com 并添加她去canEdit 的角色。
保护与SSL和授权的应用程序属性
在这一节中您将应用 授权 属性限制行动的方法。 匿名用户可以查看 指数 动作方法的控制器。 注册用户将能够看到联系人数据( 指数 和 细节 页的Cm控制器),关于,联系页面。 只有用户 canEdit 角色可以访问行动改变数据的方法。
添加 授权 过滤器和 RequireHttps 过滤应用程序。 另一种方法是添加的 授权 属性和 RequireHttps 每个控制器属性,但它被认为是一个安全最佳实践应用到整个应用程序。 通过增加他们在全球范围内,每一个新的控制器和动作方法添加将自动保护,你不需要记住应用它们。 更多信息见 确保你的ASP。 净MVC应用程序和新AllowAnonymous属性 。 打开 App_Start \ FilterConfig.cs 文件和替换 RegisterGlobalFilters 方法(添加两个过滤器)如下:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new System.Web.Mvc.AuthorizeAttribute()); filters.Add(new RequireHttpsAttribute()); }
下面的图片显示了更改的代码:
的 授权 滤波器应用于上面的代码将防止匿名用户访问应用程序中的任何方法。 您将使用 AllowAnonymous 属性选择的授权要求在几个方法,所以匿名用户可以登录并查看主页。 的 RequireHttps 要求所有访问web应用程序将通过HTTPS。
添加 AllowAnonymous 属性的 指数 主控制器的方法。 的 AllowAnonymous 属性使您能够白名单的方法你想退出的授权。 一个图像的一部分HomeController如下所示:
全球搜索吗 AllowAnonymous 中,您可以看到它是用于登录和注册帐户控制器的方法。
在 CmController.cs ,添加
(授权(角色=“canEdit”))
HttpGet和HttpPost变化数据的方法(创建、编辑、删除,每一个动作方法指数和细节除外) 厘米 控制器。 部分完成的代码如下所示:如果你仍然登录从先前的会话,击中了 注销 链接。
点击 关于 或 联系 链接。 您将被重定向到登录页面,因为匿名用户不能查看这些页面。
单击 注册一个新用户 和添加一个本地用户链接的电子邮件 joe@contoso.com 。 验证 乔 可以查看家里,和联系页面。
单击 CM演示 链接并验证你看到数据。
点击一个编辑页面上的链接,您将被重定向到登录页面(因为没有添加到一个新的本地用户 canEdit 角色)。
身份登录 user1@contoso.com 密码的“P_assw0rd1”(“单词”的“0”是一个零)。 您将被重定向到你之前选择的编辑页面。
如果你不能登录帐号和密码,试着从源代码复制密码和粘贴它。 如果你仍然不能登录,检查 用户名 列的 AspNetUsers 表来验证 user1@contoso.com 是补充道。验证您可以使数据的变化。
将应用程序部署到Azure
在Visual Studio中,右键单击项目 解决方案资源管理器 并选择 发布 从上下文菜单中。
的 发布网站 向导打开。
单击 设置 标签的左边 发布网站 对话框。 单击 v 图标来选择 远程连接字符串 为 ApplicationDbContext 并选择 ContactManagerNN_db 。
下 ContactManagerContext 中,选择 执行代码首先迁移 。
点击 发布 。
身份登录 user1@contoso.com “P_assw0rd1”(密码)并验证您可以编辑数据。
注销。
去 谷歌开发者控制台 和 凭证 标签更新uri和JavaScript重定向不想使用Azure URL。
使用Google或Facebook登录。 这将添加谷歌或Facebook账户 canEdit 的角色。 如果你得到一个HTTP 400错误消息 重定向请求URI:https://contactmanager {我的版本}.azurewebsites.net/signin-google并不符合注册重定向的URI。 ,你将不得不等到您传播所做的更改。 如果你得到这个错误超过一分钟后,验证uri是正确的。
停止阻止他人注册的网站
- 在 服务器资源管理器 ,导航到 网站 。
右键单击每个网站实例并选择 停止网站 。
另外,从Azure管理门户,您可以选择该网站,然后单击 停止 图标在页面的底部。
删除AddToRoleAsync、发布和测试
- 注释掉或删除以下代码 ExternalLoginConfirmation 方法在帐户控制器:
等待UserManager.AddToRoleAsync(用户。 Id、“canEdit”);
- 构建项目(保存文件更改和验证你没有任何编译错误)。
右键单击项目 解决方案资源管理器 并选择 发布 。
单击 开始预览 按钮。 只需要更新部署的文件。
开始从Visual Studio或从门户网站。 您将无法发布在网站停止了 。
回到Visual Studio并单击 发布 。
你的Azure应用在你的默认浏览器打开。 如果你登录,注销,这样你就可以查看主页作为一个匿名用户。
单击 关于 链接。 您将被重定向到登录页面。
单击 注册 登录页面上的链接并创建本地帐户。 我们将使用这个本地帐户核实您可以访问只读页面但你不能访问页面更改数据(的保护 canEdit 角色)。 稍后在本教程中我们将删除本地帐户的访问。
验证您可以导航到 关于 和 联系 页面。
单击 CM演示 导航到链接 厘米 控制器。 或者,您可以添加 厘米 URL。
点击一个编辑链接。 您将被重定向到登录页面。 下 使用另一个服务来登录 ,点击Google或Facebook和登录你以前注册的账户。 (如果你工作很快和你的会话cookie没有超时,您将自动登录谷歌或Facebook帐户您之前使用。)
验证您可以编辑数据,登录到这个帐户。 注意: 你不能退出谷歌的这款应用,登录不同的谷歌帐号相同的浏览器。 如果您正在使用一个浏览器,你需要导航到谷歌和注销。 你可以从相同的与另一个帐户登录第三方身份验证(如谷歌)通过使用不同的浏览器。
如果你没有填写第一个和最后一个名字你的Google账户的信息,得到NullReferenceException。
检查SQL Azure数据库
- 在 服务器资源管理器 ,导航到 ContactDB
右键单击 ContactDB 并选择 在SQL Server对象资源管理器打开 。
注意: 如果你不能扩大 SQL数据库 和 不能 看到 ContactDB 从Visual Studio,你必须遵循下面的说明打开防火墙端口或端口范围。 按照说明下 建立Azure防火墙规则 。 你可能需要等待几分钟后访问数据库添加防火墙规则。
右键单击 AspNetUsers 表并选择 视图数据 。
注意从Google帐户Id您注册的 canEdit 的角色,和的Id user1@contoso.com 。 这些应该是唯一的用户 canEdit 的角色。 (你将在下一步验证。)
在 SQL Server对象资源管理器 ,右键单击 AspNetUserRoles 并选择 视图数据 。
验证 用户标识 年代来自 user1@contoso.com 和你注册谷歌帐号。
建立Azure防火墙规则
遵循本节中的步骤如果你不能连接到SQL Azure从Visual Studio或如果你得到一个错误对话框说“不能打开服务器”。
你需要将你的IP地址添加到允许IP。
在Azure门户,选择 SQL数据库 在左边选项卡。
点击 ContactDB 。
单击 Azure防火墙规则设置IP地址 链接。
当您被提示“当前IP地址xxx.xxx.xxx。 xxx不包括在现有的防火墙规则。 你想要更新防火墙规则吗? ”,点击 是的 。 添加这个地址通常是不够的在一些公司防火墙后面,您需要添加一个范围的IP地址。
下一步是添加一个允许IP地址范围。
- 在Azure门户,点击 SQL数据库 。
选择 服务器 选项卡,然后单击您希望配置的服务器。
单击 配置 选项卡。
添加规则名称、开始和结束的IP地址。
在页面的底部,单击 保存 。
请留下反馈,让我知道如果你需要添加一个范围的IP地址连接。
最后,你可以从SQL Server连接到SQL数据库实例对象资源管理器(SSOX)
- 从视图菜单中,单击 SQL Server对象资源管理器 。
- 右击 SQL Server 并选择 添加SQL服务器 。
- 在 连接到服务器 对话框中,设置 身份验证 来 SQL Server身份验证 。 你会得到的 服务器名称 和 登录 从Azure门户。
- 在浏览器中,导航到门户和选择 SQL数据库 。
- 选择 ContactDB ,然后单击 视图的SQL数据库连接字符串 。
从 连接字符串 页面,复制 服务器 和 用户Id 。
过去 服务器 和 用户Id 值到 连接到服务器 对话框在Visual Studio。 的 用户Id 价值进入 登录 条目。 你输入密码用于创建SQL数据库。
你现在可以导航到接触DB使用前面给出的指令。
将用户添加到canEdit角色通过编辑数据库表
早些时候在本教程中您使用代码来将用户添加到canEdit角色。 另一种方法是直接操作中的数据成员表。 以下步骤展示了如何使用这个替代方法来添加一个用户角色。
在 SQL Server对象资源管理器 ,右键单击 AspNetUserRoles 并选择 视图数据 。
复制 roleid 并将它粘贴到空(新)行。
在 AspNetUsers 表找到用户想要的角色,并将用户的复制 ID ,然后将它粘贴到 用户标识 列的 AspNetUserRoles 表。
我们正在研究一种工具,这将使管理用户和角色更加容易。
下一个步骤
按照我的教程,建立在这个示例:
- 创建一个安全的ASP。 净MVC 5 web应用程序登录,邮件确认,密码重置
- ASP。 净MVC 5应用手机短信和电子邮件两因素身份验证
- 最佳实践将密码和其他敏感数据部署到ASP。 网和Azure
- 创建一个ASP。 净MVC 5与Facebook和谷歌OAuth2应用 这包括说明配置文件数据添加到用户注册DB和详细说明,使用Facebook作为身份验证提供者。
- 开始使用ASP。 净MVC 5
使社会登录按钮显示在本教程中,明白了 漂亮的社会登录按钮ASP。 净MVC 5 。
汤姆·戴克斯特的优秀 开始使用EF和MVC 将向您展示更高级的MVC和EF编程。
本教程和示例应用程序是由 里克•安德森 (推特 @RickAndMSFT )和帮助汤姆·戴克斯特和巴里Dorrans(Twitter @blowdart )。
请留下反馈 你喜欢什么或者你希望看到改善,不仅教程本身,而且对产品演示。 您的反馈将帮助我们优化改进。 你也可以请求和新主题进行投票 告诉我如何使用代码 。
- 部署一个安全的ASP.NET MVC 5应用程序成员、OAuth和SQL Azure网站数据库
- 将ASP.NET Web应用程序部署到Windows Azure Web Site和SQL 数据库
- 将ASP.NET Web应用程序支配到Windows Azure Web Site和SQL 数据库
- 转发:ASP.NET MVC 4与Windows Azure 表、Blobs、队列的教程系列和示例应用程序
- [ASP.Net MVC 5 - 01] ASP.Net MVC and Azure
- XP下部署asp.net MVC应用程序
- [翻译]15分钟内创建一个电影的ASP.NET MVC数据库应用程序
- [ASP.Net MVC 5 - 02] Azure 预览
- iis部署asp.net mvc网站出错的解决方法
- ASP.NET Web应用程序和ASP.NET网站的区别
- ASP.NET网站和ASP.NET应用程序的区别
- Asp.net Web应用程序和Asp.Net网站的区别
- ASP.NET网站和ASP.NET应用程序的区别
- 【ASP.NET MVC】SQL 数据库
- ASP.NET 应用程序的安全
- ASP.NET安全[开发ASP.NET MVC应用程序时值得注意的安全问题](转)
- Asp.net(C#)和创建SQL数据库(.sql)文件的打包部署安装 并创建iis
- Asp.net(C#)和创建SQL数据库(.sql)文件的打包部署安装 并创建iis
- Linux下使用daemon函数编写后台程序
- 设置 GDB 代码搜索路径
- [水题][第一阶段-回归水题][HDOJ-2013]蟠桃记
- vim配置
- 中关村翠湖科技园:高端产业加速器
- 部署一个安全的ASP.NET MVC 5应用程序成员、OAuth和SQL Azure网站数据库
- Binary Search Tree Iterator
- 为什么说某些社区大学是个很好的跳板?
- [水题][第一阶段-回归水题][HDOJ-2014]青年歌手大奖赛_评委会打分
- 社区大学--另一个进入名牌大学的途径
- ubuntu12.04安装Qt4.8.1遇到问题
- 只提供产品还不够,智能家居们相互争夺控制权
- [水题][第一阶段-回归水题][HDOJ-2015]偶数求和
- Excel Sheet Column Title