本节包括以下内容:
1:第三方社区账号登陆的授权流程
2:OAuth2 组件的下载及web.config配置
3:OAuth2 组件的5行代码编写流程
4 :总结与下节内容预告

一: 第三方社区账号登陆的授权流程
1:首先从这里开始:用户进入登陆界面
 
2:用户点击用新浪微博或QQ登陆,系统跳到第三方授权页面,(QQ示例授权界面)
3:确定授权后,第三方跳转返回你的回调页(在应用里设置),通常仍是系统登陆页面统一处理。授权用户绑定您网站的账号。
 
我们首次引导登陆并绑定账号,当然,官方建议的比较好的用户体验的界面是这样的:
  
4:用户正常登陆或注册新账号,自动实现绑定,至此流程结束,下一次用户点用第三方账号登陆时,系统检测到已绑定账号,直接用绑定的账号进入后台。
二:OAuth2 组件的下载及web.config配置 
1:下载OAuth2.dll组件,下载: OAuth2.rar()
2:引用该dll到您的网站项目中;
3:在web.config配置您的appkey、appsercet及回调网址(通常是登陆页面),相关的数据填写到web.config对应key的value里。

PS:获取或调置回调网址是在新浪和QQ开放者平台操作的,相关网址见上节文章。
 
接下来,我们要在登陆界面(示如Login.aspx)动点小手术: 
三:OAuth2 组件的5行代码编写流程 
1: OAuth2.UI.GetHtml() //获取界面显示
代码示例:通常我们可能会在Login.aspx的html里写上这么一行代码来显示: <%=OAuth2.UI.GetHtml()%>
当然我们也经常喜欢在Login.aspx.cs后台代码(通常是Page_Load事件)里输出:div控件ID.InnerHtml=OAuth2.UI.GetHtml(); 
于是就有了刚才的登陆界面下面那两个第三方授权链接图标: 

用户点击第三方授权,跳到第三方授权页面,操作完回调还会返回到这个登陆界面,只是多了两个参数code=xxxx&state=xxx(回调页面仍设置登陆页)。
2:OAuth2.OAuth2Base ob = OAuth2.OAuth2Factory.Current;//获取当前的授权类型,如果成功,则缓存到Session中。 
3:ob.Authorize(out account)//检测是否授权成功,并返回绑定的账号。
这两行代码,是写在Page_Load事件中,判断如果是跳转回来的,就分析授权,然后进行分支处理:
以下是示例的分支代码:
OAuth2.OAuth2Base ob = OAuth2.OAuth2Factory.Current;//获取当前的授权类型
if (ob != null) //说明用户点击了授权,并返回到登陆界面来
{
    string account = string.Empty;
    if (ob.Authorize(out account))//检测是否授权成功,并返回绑定的账号(具体是绑定ID还是用户名,你的选择)
    {  
      if (!string.IsNullOrEmpty(account))//已绑定账号,直接用该账号设置登陆。
      {
          //根据账号,设置登陆、设置cookie,跳转到后台管理界面。
      }
      else // 未绑定账号,引导提示用户绑定账号。
      {
           //取用户的第三方头像和昵称,组装界面显示,像秋色园就一行提示文字           
      }
}
else // 读取授权失败。
{
     //提示用户重试,或改用其它社区方法登陆。
}
如果用户已经授权,首次未绑定账号,通常就有了最下方的提示文字,同时“登陆”的文字就改成了“绑定账号":
  
4:OAuth2.OAuth2Base ob = OAuth2.OAuth2Factory.SessionOAuth;//获取存在Session的授权
5:ob.SetBindAccount(userName);//绑定账号
这两行代码,写在BtnLogin和BtnRegister按钮的事件中,当用户登陆,或注册新账号时,我们从Session中获取刚刚的社区授权,然后绑定账号:
//用户登陆,或注册完账号(这时我们可以拿到ID或者username,绑定哪个就看使用哪个方便了,我们添加以下三行代码,
OAuth2.OAuth2Base ob = OAuth2.OAuth2Factory.SessionOAuth;//获取刚刚的授权(授权后存在Session中)
if (ob != null && !string.IsNullOrEmpty(ob.openID))
{
   ob.SetBindAccount(userName);//绑定账号username或id都可以
} 

到这里,整个应用就完成了,就是这么简单,除配置项,组件提供的关键的代码只有5行,却实现了相关的功能。
四:总结与下节内容预告
A:看完本文,您应该可以获取到以下信息: 
1:知道OAuth授权的界面流程
2:知道怎么实现这个授权流程。

B:如果您认真看完本节,或自己实操下,您可能有以下问题想问:
1:和网站绑定授权,没看到相关的数据库操作,那获取的token和openid存在哪?
2:如何修改界面,或自定义UI界面?
3:有没有源码?

也许,下面这句话给了您答案:下节,将开放源码下载并尝试为您讲解源码中的组件设计思路,敬请关注。
51cto大赛的参赛页面,感谢路过的朋友也顺手扔一票:http://blog.51cto.com/contest2012/2127378   
     本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/1051411,如需转载请自行联系原作者

通用社区登陆组件技术分享(开源)中篇:OAuth 登陆组件流程及组件集成方法...相关推荐

  1. 通用社区登陆组件技术分享(开源)下篇:OAuth 源码下载及原理解说

    原文http://www.cnblogs.com/cyq1162/archive/2012/11/07/2756848.html 上节内容: 1:通用社区登陆组件技术分享(开源)上篇:OAuth 授权 ...

  2. KDD Cup 2019 AutoML Track冠军深兰科技DeepBlueAI团队技术分享 | 开源代码

    作者丨罗志鹏 单位丨深兰北京AI研发中心 近日,KDD Cup 2019 AutoML Track 比赛结果出炉,本次赛题是第五次 AutoML 挑战赛,由第四范式.ChaLearn 和微软联合举办, ...

  3. 技术分享 | 开源不稳?试试DJI N3飞控呢

    原创阿木实验室 1. DJI N3飞控简介 N3内置双IMU冗余设置,结合在线故障检测算法,可实现双IMU数据实时互为备份,极大地提高了飞行器可靠性.集成8GB工业级SD卡的"黑匣子&quo ...

  4. 【华为云技术分享】详解浏览器跨域的几种方法

    1前言 2背景知识介绍 2.1同源政策 2.2为什么要有跨域限制 3浏览器跨域的解决方案 3.1 CORS标准 3.2 CORS跨域判定的总体流程 3.3简单请求 3.4非简单请求 3.5 CORS相 ...

  5. 【华为云技术分享】LiteOS无法直接烧录或者烧录失败解决方法--ST-Link

    前提条件:程序编译成功,并且电脑上已经安装ST-Link驱动,你使用的仿真器也是ST-Link. 上图黑色的是J-Link,下图紫色的是ST-Link,本教程适用于ST-Link,如果是J-Link, ...

  6. 【技术分享】迅为i.MX6ULL开发板-Uboot-Logo修改方法

    硬件平台:iMX6ULL开发板 本文介绍的在 uboot 下 logo 显示和修改步骤. 使用的资料已经放到了开发板网盘资料中,路径为"11_Linux 系统开发进阶\72_章节使用资料&q ...

  7. 技术分享:前端开发中电脑和手机联调的方法

    如果是普通的H5页面,那么电脑和手机处于一个局域网,手机就可以访问电脑启动的前端项目了. 例如,项目地址是 http://192.168.43.241:8088,在手机直接访问http://192.1 ...

  8. 2018 大湾区(深圳) .NET技术分享交流会 第一期

    .NET Core 2.1 已于2018年5月30日正式发布,邀请粤港澳大湾区.NET技术专家和从业人员,一起分享与交流.NET技术的发展方向,提高粤港澳大湾区.NET技术交流氛围,挖掘.NET高级人 ...

  9. 2017(深圳) .NET技术分享交流会(第二期)网络直播活动

    .NET Core 2.0 已于2017年8月14日正式发布,2017(深圳) .NET技术分享交流会在公众号中发出2个小时后就被抢光了,受限于场地无法增加人数,这次如鹏网杨中科老师提供VIP级的网络 ...

最新文章

  1. windows7下vs2008常见错误解决方法汇总
  2. 学习UI设计的一些小技巧你会了吗
  3. oracle管道化表函数
  4. Trailblazer —— Rails 的扩展概念驱动开发框架
  5. python就业方向及工资-Python的5大就业方向,薪资诱人前景好!
  6. AS问题解决系列1—Unable to execute DX错误
  7. HDOJ2072解题报告【字典树】
  8. 程序员基本功05表达式中的陷阱
  9. html表格通过邮件发送,通过html表格发电子邮件
  10. 语言孪生素数问题_刘建亚教授讲述“素数的故事”
  11. C++结构体实例和类实例的初始化 .
  12. JCL 清理 LOGREC 日志
  13. Lua开发学习2-数据类型
  14. matlab教程 当当,MATLAB实用教程(第4版)
  15. android中百分比显示_如何在菜单栏中显示Android的电池百分比
  16. 【未来iPhone 手机中将加入卫星通信功能?】
  17. ISE在win10中闪退解决方法以及ISE14.7安装包
  18. Ubuntu断电重启后出现recovering journal的问题
  19. win10关闭快速启动_关闭Win10中这七个不必要的服务,解决电脑卡顿问题。
  20. 基于tensorflow和卷积神经网络的电影推荐系统的实现

热门文章

  1. python 改变图片尺寸
  2. 小人脸检测 - Finding Tiny Faces
  3. Linux下使用终端调试Python程序:pudb
  4. Python 报错解决:AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
  5. oracle中key,mysql中的key在oracle中是什么
  6. linux webservice服务器端,Linux查看资源使用情况 webservice服务端口监控
  7. php7-fpm webtatic,如何在 CentOS 7 中使用 Nginx 和 PHP7-FPM 安装 Nextcloud
  8. dev schedulercontrol 不显示周_CBA更新伤病报告:丁彦雨航仍需5周 阿联还要休养半年...
  9. C++_泛型编程与标准库(四)
  10. android中的Json一