2KB项目,专业的源码交易网站 帮助 收藏 每日签到

ASP.NET MVC 中实现真实世界中的 OAuth 身份认证

  • 时间:2019-01-23 18:41 编辑:2KB 来源:2KB.COM 阅读:455
  • 扫一扫,手机访问
  • 分享
摘要:
ASP.NET MVC OAuth 英文原文:Real World OAuth using ASP.NET MVC

摘要:本文演示如何在ASP.NET MVC应用程序中,基于DotNetOpenAuth,集成新式的OAuth身份验证。以便于从提供OAuth验证的服务商处,检索所需用户信息。

你可能没有听说过OAuth或OpenID,但你肯定在日常生活中使用过它。你是否使用过google账户和密码登陆过StackOverflow?是否使用过WordPress.com帐号在某人的博客中发表过评论?是否通过第三方Twitter客户端登陆过你的Twitter帐号?是否使用Facebook在一些科技博客站点发表过评论?如果你做过其中任何一种,那你所见到的就是OAuth或OpenID的具体应用。

OpenID和OAuth是什么

总体来讲,它们都是认证协议,努力实现Web中的一个梦想——单击登陆。而前提是,我们注册用户名和密码是通过专门的认证提供商,而并非记住我们在网上所访问的各个应用中的用户名和密码。应用(又叫应答方)引导我们到这个提供商来进行认证,在成功认证之后,提供商回传一个令牌给发起请求的应答方。之后,目标应用使用令牌来验证用户身份,并提供应用内容访问进一步的许可。

OAuth是由Twitter提出的,当时他们正忙于建立他们自己的用于TwitterAPI的OID实现。他们的需求更多是,在提供商提供的认证类型和那些应答方探索的基础上,能够实现控制哪些内容可用。

例如,当可信任方注册推特认证权限时,它们可以请求只读连接(这种连接给它们提供用户流的读权限)、读写连接(这种连接给它们提供用户流的读写权限)以及具有直接消息发送功能的读写连接(给它们提供用户数据的最大访问权限)。因此当通过OAuth使用推特对用户进行认证时,它们要准确的告知它们需要提供什么类型的权限。

另一方方面,OpenID只是通过验证你的用户名和密码确定你是你声称的那个人。它没有方法来控制功能访问权限。

用更直白的话来说,OpenID是认证,而OAuth是认证和授权(某些功能给提供服务方)

oauth-provider-auth

上图显示了OAuth服务提供者认证的过程。整个认证流程如下:
  1. 应用(即可信任方)注册为OAuth服务提供商,然后获得一个应用特定的钥匙(密钥)。这是一次性离线完成的(没有显示在上图)。
  2. 然后每当应用(即可信任方)试图对某个人进行认证时,它都传递应用密钥给服务提供者。
  3. 可信任方的用户必须在服务提供商注册(再次说明,这也是一次性离线完成的)
  4. 每次认证请求都直接把用户转接到认证服务提供商的站点。用户输入他们在认证服务提供商创建帐户时所获得的用户名和密码。然后服务提供商验证用户凭证,接着与应用密钥匹配,然后返回给仅执行授权动作的可信任方一个令牌。
如果你愿意更深入地了解这些协议的话,那么在GitHub页面上我有大量的有关这篇文章的参考资料可以自由的浏览。 推特OAuth和ASP.NET
今天我们将学习如何使用ASP.NET集成的DotNetOpenAuth库来允许你整合使用推特/脸谱/谷歌用户和其他类似的服务提供商。网络上的大多数例子在认证部分后就基本终止了,并且没有详细的阐述你如何进一步使用这些认证。今天我们将稍稍深入的挖掘,看看除了ASP.NET提供的默认做法外还能做些什么,然后从我们的OAuth服务提供商比如推特哪儿提取更多信息。
开始-向推特注册应用
正如上面我们看到的,需要四个步骤,让我们从第一部开始,向推特注册我们的应用。
  1. 把浏览器指向http://dev.twitter.com ,然后点击右上角的注册。

twitter-signin

2.使用你的推特用户登陆,接着悬停你的账号信息上,然后点击“我的应用”

my-applications

这将把你导向到你可以注册新的推特应用的应用页面上。这个页面是一个中转者。

3.下一步点击“创建一个新的应用”,然后浏览器将引导你进入新的应用页面。要求提供以下详细信息:

create-application

  • 提供正确的名字和说明,这些将在你的站点的新用户的每一次认证的时候提取出来。
  • 指定一个指向站点地址的回调URL。你可以把它指向http://127.0.0.1/
  • 注意,站点设置为本机地址,这是为了测试所用。一旦你有了应用的话,请返回设置这项为真正的站点。
  • 向下滚动,仔细地读取开发者规则,然后点击确定,我同意。填写验证码,接着点击“创建你的推特应用”。

twitter-captcha

4.推特将把你导向到类似下面的页面:

oauth-demo-setup

下一步点击“创建我的访问标识”,这将生成我们应用将和客户关键字和客户密码一起使用的访问标识。记住这三个值不应当相同。
还要注意访问级别默认情况下设置为只读。对我们的应用来说,我们只需只读权限,不过如果你愿意以用户的行为发送推文的话,你可能要从“设置”标签处修改权限。记住如果你更改了访问级别的话,那么请重新生成访问标识。
到这儿,我们已经为第一步准备就绪了。现在让我们构建我们应用的测试版吧。 使用注册信息去向推特认证
1.创建新的ASP.NET MVC 互联网应用,选择互联网模板。

2.从APP-Start文件夹里打开AuthConfig.cs,然后去掉注册推特客户端的代码的注释。

public static void RegisterAuth()
{
OAuthWebSecurity.RegisterTwitterClient(
  consumerKey: "",
  consumerSecret: "");
}

3、把关键字放入web.config文件,然后更新从配置的设置里读取这些值得代码

4、更新项目属性,然后在如上面URL指明的同样端口上运行应用。

app-port

5、差不多就这样。运行应用 ,然后点击出现的带有新的登陆页面的登陆链接

app-port

这时你可以看到我们有一个登陆到推特的按钮。当我们点击这个按钮的时候,看看什么发生了。

6.点击推特按钮时,应用会转到推特页面。

twitter-app-page

这时你将会看到以下内容:

-右手边是创建应用时你所提供的与应用相关的信息 包括URL.
-用户或者电子邮件地址文本输入框的上面是请求应用能做的事情列表,在我们的例子里,这个应用能够"从你的时光轴里读取推文"和"查看你关注谁"。

注意:这就是为什么当你使用OAuth的时候,你不得不注意仅仅请求你所需要的那么多的信息。如果你的应用看起什么都想知道,那么最终用户可能选择不赋予你权限。

-成功认证之后,你将看到一个简要的‘正在重新导向“信息闪过,然后将把用户再次导向到我们的应用。

7.由于是首次登陆,将要求我们通过以下页面注册

register-account

8.一旦你注册了 ,那么你就以已认证用户的身份登陆这个应用了

authenticated-user

9.到这儿,我们已经完成了OAuth过程的第2、3和4步了,而且这就是大多数演示性应用终止的地方。

解码OAuth客户端

由于我们已经有一个正在工作的推特认证在运行,所以让我们看看在我们的应用里使用推特Avatar做了些什么?一旦认证通过,我们期望返回给我们整个用户资料,然而认证结果里的用户资料是附加数据。然而如果登陆后不久我们进入AccontController话,我们就会看到附加数据仅仅是不包含在Avatar URL里的一小部分数据值。

account-controller-debug

那么现在该怎么办呢?经过前面的一些分析后,我得出这样的结论:除了创建我们自己定制的OAuth客户端外别无选择。从本质上来讲,ASP.NET提供的默认的TwitterClient类至少可以说是个框架。

改写默认的TwitterClient,构建我们自己的TwitterClient

为了开始这项工作,我们参考了DotNetOpenAuth的GitHub代码仓库里的TwitterClient(耶,开发源代码的),接着把整个实现复制到一个叫TwitterClientEx的新类里 。

内容复制完成后,我们将需要复制一些格式化字符和对字符转义的辅助方法。很奇怪,它们是用内部方法实现的。
文中的代码指的是具有一些辅助方法的内部静态扩展类DictionaryExtensions。我们还引进了三个辅助方法:LoadXDocumentFromSteam,CreateUntrustedXmlReaderSettings和EscaperUriDataStringRfc3986。所有这些方法都是在TwitterClient类或者OAuthClient类里实现的,不过不幸的是它们不可重用。 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部