这个教程向你展现了怎么创立一个ASP.NET MVC 4的web使用,能让用户用内部供给方的证书(比方Facebook, Twitter, Microsoft,或Google)登岸,然后将源自那些供给方的一些功用集成进你的web使用。为容易起见,本教程首要讲述与Facebook的证书一同任务。
在你的web使用中启用这些证书供给了一个主要的优势,由于数百万用户曾经有这些内部供给方的帐号。假如不是必需创立而且记着一组新的证书,这些用户可能更偏向于注册你的网站。并且当一个用户经过某一个供给方登岸当前,你可以引入供给方的社会化举措。
本指南首要有两个目的:
固然本文的例子只演示了将facebook作为受权办事供给者,可是你可以修正代码去运用恣意一个第三方的办事供给者.那些完成的步调汇合你在本文中看到的十分相似.你只要在间接挪用第三方供给的API聚集时才会发明一些明显的差别.
其它翻译版本 (1) 加载中并且,本文假定你具有ASP.NET MVC与Visual Studio的根底常识。假如你需求一个ASP.NET MVC 4的引见, 请看 ASP.NET MVC 4引见.
在Visual Studio里创立一个新的 ASP.NET MVC 4 Web Application,定名它为 "OAuthMVC"。你可以选择目的为.NET Framework 4.5 或 4中恣意一个。
在 New ASP.NET MVC 4 Project 窗口, 选择 Internet Application 并保存 Razor 作为视图引擎。
当你用Internet Application模板创立出一个MVC 4 web application时,这个工程在App_Start目次创立了一个名为AuthConfig.cs的文件。
AuthConfig文件包括了针对内部证书供给方的客户注册代码。默许状况下,这些代码被注释掉了,所以没有内部供给者被启用。
public static class AuthConfig { public static void RegisterAuth() { // To let users of this site log in using their accounts from other sites such as Microsoft, Facebook, and Twitter, // you must update this site. For more information visit http://go.microsoft.com/fwlink/?LinkID=252166 //OAuthWebSecurity.RegisterMicrosoftClient( // clientId: "", // clientSecret: ""); //OAuthWebSecurity.RegisterTwitterClient( // consumerKey: "", // consumerSecret: ""); //OAuthWebSecurity.RegisterFacebookClient( // appId: "", // appSecret: ""); //OAuthWebSecurity.RegisterGoogleClient(); } }
你必需反注册这些代码,以便运用内部的客户证书。你只需反注册你想归入你的网站的供给方。对本教程,你只需启用Facebook证书。
public static class AuthConfig { public static void RegisterAuth() { //OAuthWebSecurity.RegisterMicrosoftClient( // clientId: "", // clientSecret: ""); //OAuthWebSecurity.RegisterTwitterClient( // consumerKey: "", // consumerSecret: ""); OAuthWebSecurity.RegisterFacebookClient( appId: "", appSecret: ""); //OAuthWebSecurity.RegisterGoogleClient(); } }
留意上面的例子,办法包括了注册参数的空字符串。假如你想如今运转这个使用,使用会抛出一个参数异常,由于这个参数不答应空字符串。为了给出正当的值,你必需像下一节显示的那样,在内部供给方注册你的网站。
要经过来自内部供给方的证书判定用户,你必需在供给方注册你的网站。当你注册你的网站时,你将会收到一些参数(比方key或id,和暗码),以便注册客户时包括出来。你必需在你想运用的供给方有一个帐号。
本教程没有出现出在这些供给方实行注册的一切必需的操作步调。这些步调凡是是不难的。为了胜利的注册你的网站,依照那些网站供给的唆使去做。要Start注册你的网站,看看这些开发者网站:
在Facebook注册你的网站时,你可以规则"localhost"为网站域名,"http://localhost/"为网址,像下面图片显示的那样。运用localhost对大大多数供给方有效,但今朝对Microsoft供给方无效。对Microsoft供给方,你必需包括一个正当的web网站地址。
在后面的图片中,app id,app secret 和contact email的值被剔除。当你真正注册你的网站时,那些值将会浮现。你要留意app id 和app secret的值,由于你将会把它们加到你的使用,
假如你不介怀运用一个已存在的Facebook帐号来测试你的网站,你可以跳过本节。
你能很轻易的在Facebook app治理页面中,为你的使用创立测试用户。你能用这些测试帐号登录你的网站。创立测试用户要点击右边导航格子的Roles链接,并点击Create链接。
Facebook网站主动创立你请求的数量的测试帐号。
如今你收到了来自Facebook的id和secret,回到AuthConfig文件把它们作为参数值增加出来。下面显示的数值不是真实的数值。
public static class AuthConfig { public static void RegisterAuth() { //OAuthWebSecurity.RegisterMicrosoftClient( // clientId: "", // clientSecret: ""); //OAuthWebSecurity.RegisterTwitterClient( // consumerKey: "", // consumerSecret: ""); OAuthWebSecurity.RegisterFacebookClient( appId: "111111111111111", appSecret: "a1a1aa111111111a111a111aaa111111"); //OAuthWebSecurity.RegisterGoogleClient(); } }
那就是在你的网站启用内部证书全体要做的。运转你的使用点击右上角的login链接。模版主动辨认出你注册了Facebook作为供给方,并为这个供给方包括了一个按钮。假如你注册了多个供给方,一个按钮对应一个会主动包含出去。
本教程没有掩盖如何为内部供给方客制化登录按钮。需求那些信息,可以看运用OAuth/OpenID时客制化登录界面。
点击Facebook按钮以Facebook证书登录。当你选择了内部供给方的一个,你将被重定向到阿谁网站,并在其办事提醒下登录。
下图显示了Facebook的登录界面。它标明你在用名为oauthmvcexample的Facebook帐号登录一个网站。
用Facebook证书登录当前,一个页面通知用户这个网站将拜访其根本的信息。
选择 Go to App当前, 用户必需在该网站注册。下图显示了一个用户用Facebook证书登录当前的注册页面。用户名被典范的用一个来自供给方的名字预填充。
点击 Register 完成注册。封闭阅读器。
你可以看到新的帐号曾经被加到你的数据库。在Server Explorer里,翻开DefaultConnection数据库并翻开Tables目次。
右击 UserProfile 表选择 Show Table Data。
你将看到你增加的新帐号。看看webpage_OAuthMembership表中的数据。你会看到为你刚增加的帐号,有关内部供给方的的更大多数据。
假如你只是想启用内部鉴权,你曾经完成了。但是你可以进一步未来自供给方的信息集成进新用户注册进程,就像下面几节显示的那样。
正如你在后面几节留意到的,你不需求取得任何附加的信息来使内建的注册去任务。可是,大大多数供给方前往了关于用户的附加信息。下面几节显示了如何保存该信息并将它存入数据库。特殊的,你将保存这些值,用户的全名,用户个人主页的URI,和标明Facebook能否验证了该帐号的一个值。
你将运用代码起首迁徙来增加一个表,以便存储附加用户信息。你在增加表到已存在的数据库,因而起首你需求创立一个以后数据库的快照。经过创立以后数据库的快照,你可以当前创立一个仅包括新加表的迁徙。要创立以后数据库快照:
如今你要增加新的属性。在Models目次,翻开AccountModels.cs文件,找到RegisterExternalLoginModel类。RegisterExternalLoginModel类持有由鉴权供给方前往的数值。增加名为FullName 与 Link的属性,像下面凸起的那样。
public class RegisterExternalLoginModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } public string ExternalLoginData { get; set; } [Display(Name = "Full name")] public string FullName { get; set; } [Display(Name = "Personal page link")] public string Link { get; set; } }
异样在AccountModels.cs, 增加一个名为ExtraUserInformation的新类。这个类代表了将在数据库创立的新表。
[Table("ExtraUserInformation")] public class ExternalUserInformation { public int Id { get; set; } public int UserId { get; set; } public string FullName { get; set; } public string Link { get; set; } public bool? Verified { get; set; } }
在UsersContext类里,增加下面凸起的代码,为新类创立一个DbSet属性。
public class UsersContext : DbContext { public UsersContext() : base("DefaultConnection") { } public DbSet<UserProfile> UserProfiles { get; set; } public DbSet<ExternalUserInformation> ExternalUsers { get; set; } }
如今你预备好创立新表了。再次翻开 Package Manager Console,此次:
新表示在在数据库呈现了。
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务