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

原创 2016年11月23日 12:14:23
上节内容:通用社区登陆组件技术分享(开源)上篇:OAuth 授权登陆介绍
 

本节包括以下内容:

1:第三方社区账号登陆的授权流程

2:OAuth2 组件的下载及web.config配置

3:OAuth2 组件的5行代码编写流程

4 :总结与下节内容预告

 

 

一: 第三方社区账号登陆的授权流程

1:首先从这里开始:用户进入登陆界面

 

2:用户点击用新浪微博或QQ登陆,系统跳到第三方授权页面,(QQ示例授权界面)


3:确定授权后,第三方跳转返回你的回调页(在应用里设置),通常仍是系统登陆页面统一处理。授权用户绑定您网站的账号。

 

我们首次引导登陆并绑定账号,当然,官方建议的比较好的用户体验的界面是这样的:

connect_UI_5.png  

4:用户正常登陆或注册新账号,自动实现绑定,至此流程结束,下一次用户点用第三方账号登陆时,系统检测到已绑定账号,直接用绑定的账号进入后台。

 

二:OAuth2 组件的下载及web.config配置 

 

1:下载OAuth2.dll组件,下载: OAuth2.rar(download times)

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   

 

版权声明:本文为博主原创文章,未经博主允许不得转载,联系QQ:272657997

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

上节内容: 1:通用社区登陆组件技术分享(开源)上篇:OAuth 授权登陆介绍 2:通用社区登陆组件技术分享(开源)中篇:OAuth 登陆组件流程及组件集成方法   本节内容: ...
  • cyq1162
  • cyq1162
  • 2016年11月23日 12:14
  • 129

关于第三方登录与分享的问题总结

最新完成项目中的第三方登录与分享的功能,主要实现了 微信、QQ、微博、豆瓣的第三方登录与分享。 关于第三方登录与分享,网上有很多的第三方集成平台,使用这些平台,开发者只需要完成该平台的代码就可以实...
  • Mr_WangGang
  • Mr_WangGang
  • 2015年06月25日 09:49
  • 1550

通用社区登陆组件技术分享(开源)上篇:OAuth 授权登陆介绍

最初的想法: 最近,想为 秋色园 增加一个:新浪微博登陆:,为此花了点时间研究了新浪微博的API。   由于 微博精灵 系列软件并没有使用微博API,所以虽然开了一年多新浪微博应用软件,却从没研...
  • cyq1162
  • cyq1162
  • 2016年11月23日 12:14
  • 90

js的通用组件

/**  */ var PublicUtil = {     //提示框类型     alertType: {         warnType: 0,         okType: 1...
  • mengxiangzhou
  • mengxiangzhou
  • 2014年09月22日 10:09
  • 583

软件系统开发中的组件框架技术研究、设计和应用

计算机的应用已经从过去单纯的科学计算渗透到政务管理、商品交易、金融证券、军事指挥、航天航空、通讯导航、生物工程、医疗服务等多个领域。随着计算机技术的发展和应用范围的不断延伸,作为计算机灵魂的软件系统,...
  • wishfly
  • wishfly
  • 2007年11月01日 10:55
  • 1933

QQ分享组件的使用

分享组件分为两种:图标和按钮 图标三个样式:(大)style:'201',width:32,height:32                             (中)style:'202'...
  • mydream_10
  • mydream_10
  • 2013年05月10日 15:59
  • 2502

浅谈面向组件和面向对象的区别

很多书上说,面向对象已经不能满足现在软件发展的需要,从本质上来说,面向组件需要靠面向对象来支撑,实现一个组件,仍然是通过编写面向对象的代码,只不过,比如,做一款游戏,需要聊天系统,从面向对象的角度来说...
  • lanwanjunxixihaha
  • lanwanjunxixihaha
  • 2015年06月14日 08:53
  • 1212

谈组件技术(一)

何谓组件技术?组件技术有什么作用?为什么要应用组件技术?如何应用组件技术?我们现在都知道什么?我们现在应该做什么?又能做什么?当这些问题缠绕在心头时,也许您自己也承认,不得不学一学组件技术了,其码要了...
  • mydriverc
  • mydriverc
  • 2007年09月27日 14:40
  • 3283

权限管理组件的设计、开发思路

应用软件中通常包含用户的权限管理功能,往往不同应用系统对权限管理功能的需求不同,有自己的权限模型,权限的授权、鉴权策略。权限管理是相对独立的一个功能模块,由于功能需求不同、采用模型设计、实现技术等的不...
  • yan_dk
  • yan_dk
  • 2012年02月01日 16:50
  • 808

Android架构组件

这篇架构指南面向有一定Android开发基础并想了解高质量、高稳定性App最佳实践及推荐架构的开发者。 注意:这篇指南假设读者熟悉Android Framework,如果你是Android开发新手...
  • u014738140
  • u014738140
  • 2017年08月15日 10:30
  • 2543
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通用社区登陆组件技术分享(开源)中篇:OAuth 登陆组件流程及组件集成方法
举报原因:
原因补充:

(最多只允许输入30个字)