摘要:本文演示了如何在ASP.NET MVC应用程序中,基于DotNetOpenAuth,集成新式的OAuth身份验证。以便于从提供OAuth验证的服务商处,检索所需用户信息。
你可能没有听说过OAuth或OpenID,但你肯定在日常生活中使用过它。你是否使用过google账户和密码登陆过StackOverflow?是否使用过WordPress.com帐号在某人的博客中发表过评论?是否通过第三方Twitter客户端登陆过你的Twitter帐号?是否使用Facebook在一些科技博客站点发表过评论?如果你做过其中任何一种,那你所见到的就是OAuth或OpenID的具体应用。
总体来讲,它们都是认证协议,努力实现Web中的一个梦想——单击登陆。而前提是,我们注册用户名和密码是通过专门的认证提供商,而并非记住我们在网上所访问的各个应用中的用户名和密码。应用(又叫应答方)引导我们到这个提供商来进行认证,在成功认证之后,提供商回传一个令牌给发起请求的应答方。之后,目标应用使用令牌来验证用户身份,并提供应用内容访问进一步的许可。
OAuth是由Twitter提出的,当时他们正忙于建立他们自己的用于TwitterAPI的OID实现。他们的需求更多是,在提供商提供的认证类型和那些应答方探索的基础上,能够实现控制哪些内容可用。
例如,当可信任方注册推特认证权限时,它们可以请求只读连接(这种连接给它们提供用户流的读权限)、读写连接(这种连接给它们提供用户流的读写权限)以及具有直接消息发送功能的读写连接(给它们提供用户数据的最大访问权限)。因此当通过OAuth使用推特对用户进行认证时,它们要准确的告知它们需要提供什么类型的权限。
另一方方面,OpenID只是通过验证你的用户名和密码确定你是你声称的那个人。它没有方法来控制功能访问权限。
用更直白的话来说,OpenID是认证,而OAuth是认证和授权(某些功能给提供服务方)
2.使用你的推特用户登陆,接着悬停你的账号信息上,然后点击“我的应用”
这将把你导向到你可以注册新的推特应用的应用页面上。这个页面是一个中转者。
3.下一步点击“创建一个新的应用”,然后浏览器将引导你进入新的应用页面。要求提供以下详细信息:
4.推特将把你导向到类似下面的页面:
2.从APP-Start文件夹里打开AuthConfig.cs,然后去掉注册推特客户端的代码的注释。
public static void RegisterAuth()
{
OAuthWebSecurity.RegisterTwitterClient(
consumerKey: "",
consumerSecret: "");
}
4、更新项目属性,然后在如上面URL指明的同样端口上运行应用。
5、差不多就这样。运行应用 ,然后点击出现的带有新的登陆页面的登陆链接
6.点击推特按钮时,应用会转到推特页面。
这时你将会看到以下内容:
-右手边是创建应用时你所提供的与应用相关的信息 包括URL.
-用户或者电子邮件地址文本输入框的上面是请求应用能做的事情列表,在我们的例子里,这个应用能够"从你的时光轴里读取推文"和"查看你关注谁"。
注意:这就是为什么当你使用OAuth的时候,你不得不注意仅仅请求你所需要的那么多的信息。如果你的应用看起什么都想知道,那么最终用户可能选择不赋予你权限。
-成功认证之后,你将看到一个简要的‘正在重新导向“信息闪过,然后将把用户再次导向到我们的应用。
7.由于是首次登陆,将要求我们通过以下页面注册
8.一旦你注册了 ,那么你就以已认证用户的身份登陆这个应用了
由于我们已经有一个正在工作的推特认证在运行,所以让我们看看在我们的应用里使用推特Avatar做了些什么?一旦认证通过,我们期望返回给我们整个用户资料,然而认证结果里的用户资料是附加数据。然而如果登陆后不久我们进入AccontController话,我们就会看到附加数据仅仅是不包含在Avatar URL里的一小部分数据值。
改写默认的TwitterClient,构建我们自己的TwitterClient
为了开始这项工作,我们参考了DotNetOpenAuth的GitHub代码仓库里的TwitterClient(耶,开发源代码的),接着把整个实现复制到一个叫TwitterClientEx的新类里 。
内容复制完成后,我们将需要复制一些格式化字符和对字符转义的辅助方法。很奇怪,它们是用内部方法实现的。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务