其实这个组件写出来很长时间了,有几个月吧,一直在 MrHuo工作室  上放着,一直说要整理,太忙没时间。

另外,关于OAuth2的一些基础内容还请从网上找找资料,太多了,写的累赘。

废话不多说,先上图,无图不快。

项目采用MVC5,其实WebForm也可以,做一下前台入口和回调方法就可以了。

配置文件:

我暂时整理了这么些配置,其他想要的自己去搜索官方文档配置。

大概看一下内容(看了内容别骂我,我承认有点标题党):

其实原理就是整理了OAuth2的一些规则,各个平台的OAuth2接口基本一致,但略有不同,配置一些参数就可以获取到AuthorizationCode,接下来获取用户信息就是很简单的事情了。

那么有了这些配置文件,还得有我写的一个DLL文件,引入进去就可以了。

-------------------------------------------I‘am a cut-off rule----------------------------------------------

看下前台的代码:

显示OAuth登录入口的View:

@using MrHuo.OAuthLoginLibs.Core;
@{
    ViewBag.Title = "社会化登录组件";
}

<h2>MrHuo工作室社会化登录组件</h2>

@{
    var platforms = AuthConfigManager.GetAllLoginConfigs().OrderBy(p => p.DisplayIndex);
    foreach (var config in platforms)
    {
        <input type="button" class="btn btn-default" value="@(config.Platform)登录" onclick="location.href='/Social/OAuth/@config.Platform'" @(!config.Enabled ? "disabled='disabled' title='未启用“" + config.Platform + "”登录'" : "") />
    }
}

OAuthController里有Index Action,内容为return View();

OAuth请求登陆Controller里的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Mvc;
using Codeplex.Data;
using MrHuo.OAuthLoginLibs;
using MrHuo.OAuthLoginLibs.Core;
using MrHuo.OAuthLogin.QQApis;

namespace TestOAuth.Controllers
{
    public class SocialController : Controller
    {
        public SocialController()
        {
        }

        OAuthLogin oauthLogin = new OAuthLogin();
        public ActionResult OAuth(string platform)
        {
            return getPlatformActionResult(platform);
        }
        public ActionResult LoginCallback(string code, string state)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(code))
                {
                    return View("Error", (object)("登录发生错误:" + Request.QueryString.ToString() + "<br />Url:" + Request.Url));
                }
                string ret = string.Empty;
                var result = oauthLogin.Login(code, state);
                if (result.Error != null)
                {
                    return View("Error", (object)result.Error.Message);
                }

                if ("QQ".IsFullEqual(result.Config.Platform))
                {
                    var qqContext = new QQContext(result.Config, result.ServerResponse);
                    var user = qqContext.GetUserInfo();
                    ret += user.NickName + ",<img src='" + user.Avatar + "' />," + user.Gender + "<br /><br />";
                }
                ret += "Platform " + result.Config.Platform + " Logined Result: <br /><br />" + result.ServerResponse;
                return View((object)ret);
            }
            catch (Exception ex)
            {
                return View("Error", (object)ex.Message);
            }
        }
        private ActionResult getPlatformActionResult(string platform)
        {
            try
            {
                oauthLogin.BeginAuthoration(platform);
            }
            catch (Exception ex)
            {
                return View("Error", (object)ex.Message);
            }
            return null;
        }
    }
}

代码解释:

public ActionResult OAuth(string platform)

这个方法纯粹就是个统一登录入口,传入OAuth2认证的平台。

public ActionResult LoginCallback(string code, string state)

这个Action是填写在OAuth认证时填写在其他平台的回调地址。其中的code和state参数是OAuth登录完毕后,其他平台传过来的值。

code是AuthorizationCode,是用来换取AccessToken的重要凭据。

RouteConfig里配置:

routes.MapRoute(
                name: "SocialDefault",
                url: "Social/OAuth/{platform}",
                defaults: new { controller = "Social", action = "OAuth" }
            );

就这么简单,写的很多,其实实际操作起来,很简单。

-------------------------------------------I‘am a cut-off rule----------------------------------------------

细心的同学可能发现了,我在LoginCallback Action里写了获取QQ用户信息的代码,是的,我就写了一个测试的,其他的有时间再写。

代码我会开源的,需要现在代码的同学加我QQ,跟我要把,我怕代码放出去后别人笑我,唉,技术不咋的人总是不自信。

我会放到github上,希望大家都来完善这个组件。这样要是我有一天挂了,大家还可以用到我的组件。我很开心。。。。

结束语:

七夕过了,一如既往,悄悄的过了,门都没出。。。。。

[原创]旧事重提:只配置参数实现OAuth2登录的更多相关文章

  1. struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

  2. 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

  3. 1.配置桥接,并抓包验证 2.实现免密登录 3.修改登录端口: 22-》2222 4.不允许root用户远程登录 5.创建用户sshuser1,并设置密码,且只允许sshuser1远程ssh登录

    1.配置桥接:  抓包时如果有ens160的ICMP,说明我们的桥接搭建成功通过桥接访问到了ens160(这里忘加图片了) (1)创建一个桥接设备和会话 (2)添加设备和会话到桥接设备上 (3)启动从 ...

  4. Spark配置参数详解

    以下是整理的Spark中的一些配置参数,官方文档请参考Spark Configuration. Spark提供三个位置用来配置系统: Spark属性:控制大部分的应用程序参数,可以用SparkConf ...

  5. vsftpd配置参数详细整理

    vsftpd配置参数详细整理  -|白王斧三又干一 vsftpd配置参数详细整理     -|白王斧三又干一 发表于 2005-10-23 20:30:00   1.vsftpd配置参数详细整理#接受 ...

  6. vsftpd配置虚拟用户为登录用户02

    1.安装vsftpd 安装依赖包: yum -y install pam pam-devel db4 de4-devel db4-uitls db4-tcl 新建vsftpd系统用户: #建立Vsft ...

  7. 【转】spring boot application.properties 配置参数详情

    multipart multipart.enabled 开启上传支持(默认:true) multipart.file-size-threshold: 大于该值的文件会被写到磁盘上 multipart. ...

  8. HBase-site.xml 常见重要配置参数

    HBase 常见重要配置参数 (1) Hbase.rpc.timeout rpc 的超时时间,默认 60s,不建议修改,避免影响正常的业务,在线上环境刚开始配置的是 3 秒,运行半天后发现了大量的 t ...

  9. 微信支付配置参数:支付授权目录、回调支付URL

    一.开通微信支付的首要条件是:认证服务号或政府媒体类认证订阅号(一般认证订阅号无法申请微信支付) 二.微信支付分为老版支付和新版支付,除了较早期申请的用户为老版支付,现均为新版微信支付. 三.公众平台 ...

随机推荐

  1. Uploadify插件使用方法

    1.下载所需文件 2.导入所需文件,还需要应用jquery.js文件 3.导入css.js uploadify.css.jquery.uploadify.min.js 4.前端代码 p标签存放uplo ...

  2. C# HashSet类(复杂)对象的去重

    public class Student { public string Id { get; set; } public string Name { get; set; } public overri ...

  3. Vi命令详解

    Vi有三种模式,分别为命令行模式.一般模式和编辑模式.在命令行输入“Vi 文件名”,即可进入Vi.常用命令如下:一.一般模式翻页[Ctrl]+[f]: 向下翻一页,相当于[Page Down]按键.[ ...

  4. 分享QQ第三方登陆SDK

    主要是考虑到QQ的PHP SDK写的真是太烂了,纯属是普及API知识,而不是到手就可以部署的类库..反正自己都写了一个了,就拿出来分享下.. 什么也不多说,直接上代码. Qq_sdk.php < ...

  5. 40条优化php代码的小实例

    1.如果一个方法能被静态,那就声明他为静态的,速度可提高1/4; 2.echo的效率高于print,因为echo没有返回值,print返回一个整型; 3.在循环之前设置循环的最大次数,而非在在循环中; ...

  6. Hadoop学习历程(四、运行一个真正的MapReduce程序)

    上次的程序只是操作文件系统,本次运行一个真正的MapReduce程序. 运行的是官方提供的例子程序wordcount,这个例子类似其他程序的hello world. 1. 首先确认启动的正常:运行 s ...

  7. Android-4

    显式Intent 隐式Intent Intent过滤器相关选项 通过浏览器链接启动本地Activity

  8. js 发送ajax请求(XMLHttpRequest)

    <!DOCTYPE html><html> <head> <title></title> <script type="tex ...

  9. 【Xamarin 开发 IOS --IOS 页面导航概念Segue】

    Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom 一.视图切换类型介绍在storyboard中,segue有几种不同的类型, ...

  10. NSIS脚本调用C语言写的插件

    其实NSIS的官网已经提供了很多别人开发的插件了,今天需要用到GetVersion这个插件,这是不维护的插件了,不推荐用,但是由于现实中的问题,导致我不得不用这个插件. 所以就下载下来了. 下载下来之 ...