[原创]旧事重提:只配置参数实现OAuth2登录
其实这个组件写出来很长时间了,有几个月吧,一直在 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登录的更多相关文章
- struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...
- 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...
- 1.配置桥接,并抓包验证 2.实现免密登录 3.修改登录端口: 22-》2222 4.不允许root用户远程登录 5.创建用户sshuser1,并设置密码,且只允许sshuser1远程ssh登录
1.配置桥接: 抓包时如果有ens160的ICMP,说明我们的桥接搭建成功通过桥接访问到了ens160(这里忘加图片了) (1)创建一个桥接设备和会话 (2)添加设备和会话到桥接设备上 (3)启动从 ...
- Spark配置参数详解
以下是整理的Spark中的一些配置参数,官方文档请参考Spark Configuration. Spark提供三个位置用来配置系统: Spark属性:控制大部分的应用程序参数,可以用SparkConf ...
- vsftpd配置参数详细整理
vsftpd配置参数详细整理 -|白王斧三又干一 vsftpd配置参数详细整理 -|白王斧三又干一 发表于 2005-10-23 20:30:00 1.vsftpd配置参数详细整理#接受 ...
- vsftpd配置虚拟用户为登录用户02
1.安装vsftpd 安装依赖包: yum -y install pam pam-devel db4 de4-devel db4-uitls db4-tcl 新建vsftpd系统用户: #建立Vsft ...
- 【转】spring boot application.properties 配置参数详情
multipart multipart.enabled 开启上传支持(默认:true) multipart.file-size-threshold: 大于该值的文件会被写到磁盘上 multipart. ...
- HBase-site.xml 常见重要配置参数
HBase 常见重要配置参数 (1) Hbase.rpc.timeout rpc 的超时时间,默认 60s,不建议修改,避免影响正常的业务,在线上环境刚开始配置的是 3 秒,运行半天后发现了大量的 t ...
- 微信支付配置参数:支付授权目录、回调支付URL
一.开通微信支付的首要条件是:认证服务号或政府媒体类认证订阅号(一般认证订阅号无法申请微信支付) 二.微信支付分为老版支付和新版支付,除了较早期申请的用户为老版支付,现均为新版微信支付. 三.公众平台 ...
随机推荐
- [Leetcode][001] Two Sum (Java)
题目在这里: https://leetcode.com/problems/two-sum/ [标签]Array; Hash Table [个人分析] 这个题目,我感觉也可以算是空间换时间的例子.如果是 ...
- 深入了解session
session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的含义也很不相同.这里只探讨HTTP S ...
- angular-route 里面templeteUrl 动态加载
https://segmentfault.com/q/1010000002524964
- jquery实现弹出即消失的提示层
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Flask学习记录之Flask-Admin
相信用过Django框架的都不会忘记它强大的Admin功能,Flask-admin是一款能够与Django Admin所媲美的扩展,能够快速创建Web管理界面,实现了用户.文件增删改查等常用功能:也可 ...
- Python Udp Socket
socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...
- Spring ioc 原理
java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用他的合作对象时,自己均要使用像new object() 这样的语法来完成合作对象的申请工作.你 ...
- windows批处理命令教程
批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令 ...
- JAVA常用类库简介(转)
Java编程语言中为方便学习者学习,编制了许多类,这些类已经经过测试,都是我们编程的基础.如果不利用这些已存在的类,我们的编程工作将变得异常复杂并且效率低下.所以我们应尽可能多的掌握Java基本类库的 ...
- struct2(一)第一个struct程序
说明:本系列是针对struct2学习过程,主要的目的: 1. 探索针对一个新的开源框架的学习过程. 2. 学习struct2,学习官方对struct2介绍的方法. 3.别把英语忘了. 1. 为了更加清 ...