.Net Oauth2.0 第三方登录开发(Facebook ,LinkedIn )
需求:OAuth2实现第三方网站授权并获取其相关数据来实现登录等功能
暂时支持Facebook ,LinkedIn ,基本大同小异,只是返回时的数据不同,需根据具体返回类型进行相应处理
1.OAuth2认证流程
OAuth2认证协议涉及3方(应用、用户和服务方),加之流程较为繁琐,实现命名不尽相同,
容易忘记和混淆,简述认证流程如下
1、向使用OAuth2认证的服务方申请应用,获取应用的client_id(应用唯一标识)和client_secret(应用私钥)
2、使用key/secret向服务方请求用户授权Token(code也就是authorization_code)
3、使用用户授权Token换取用户信息访问Token(access_token ),
4、使用access_token(用户信息访问令牌)获取相关信息
2.授权访问流程
1、向第三方平台申请访问权限得到(client_id和client_secret)
2、填写Oauth2.0本站返回链接
3、向第三方平台发送授权请求
4、再返回url中进行业务潮处理
注意:申请的网址需要与实际访问的url保持一致
3. AuthHelper代码
public abstract class AuthHelper
{
public static AuthToken GetToken(string code, string token_url, string cliend_id, string client_secret, string return_url)
{
var strResult = GetTokenStr(code, token_url, cliend_id, client_secret, return_url);
try
{
var res = JsonConvert.DeserializeObject<AuthToken>(strResult);
return res;
}
catch (Exception ex)
{
Tool.Log.Write(ex.ToString());
}
return default(AuthToken);
} /// <summary>
/// 向第三方平台发送获取token请求
/// </summary>
/// <param name="code"></param>
/// <param name="token_url"></param>
/// <param name="cliend_id"></param>
/// <param name="client_secret"></param>
/// <param name="return_url"></param>
/// <returns></returns>
public static string GetTokenStr(string code, string token_url, string cliend_id, string client_secret, string return_url)
{
Dictionary<string, string> dicPara = new Dictionary<string, string>();
dicPara.Add("grant_type", "authorization_code");
dicPara.Add("code", code);
dicPara.Add("redirect_uri", return_url);
dicPara.Add("client_id", cliend_id);
dicPara.Add("client_secret", client_secret); var token = WebApiHelper.PostResponseStr(token_url, dicPara);
return token;
} /// <summary>
/// header中发送token
/// </summary>
/// <param name="accessToken"></param>
/// <param name="profile_url"></param>
/// <returns></returns>
public static string GetProFileAuth(string accessToken, string profile_url)
{
Dictionary<string, string> dicAuth = new Dictionary<string, string>();
dicAuth.Add("Authorization", "Bearer " + accessToken);
var profile = WebApiHelper.GetResponseStr(profile_url, null, dicAuth);
return profile;
}
/// <summary>
/// get方式获取token
/// </summary>
/// <param name="accessToken"></param>
/// <param name="profile_url"></param>
/// <returns></returns>
public static string GetProFileStr(string accessToken, string profile_url)
{
Dictionary<string, string> dicQuery = new Dictionary<string, string>();
dicQuery.Add("access_token", accessToken);
var profile = WebApiHelper.GetResponseStr(profile_url, dicQuery, null);
return profile;
}
}
4.返回业务处理
public ActionResult ReturnLinkedin()
{
string description = string.Empty; string code = RequestString("code");
string state = RequestString("state");
string error = RequestString("error");
string error_description = RequestString("error_description");
if (code == "" || error != "")
{
if (code == "user_cancelled_authorize" || code == "user_cancelled_login ")
{
description = code;
}
else
description = error != "" ? error_description : "no authentication !";
}
else
{
var res = Tools.Auth.LinkinHelper.GetToken(code, Tools.Auth.LinkinConfig.ReturnUrl);
if (res.access_token != "")
{
var entity = Tools.Auth.LinkinHelper.GetProFileStr(res.access_token, Tools.Auth.LinkinConfig.ProfileResourceUrl);
description = entity;
/***具体业务处理
**/
}
else
{
description = "access token error";
}
}
ViewBag.Description = description;
return View();
}
Github地址:https://github.com/willianchen/Chml.Oauth
第一次发博客 ,有疑问或者有建议的请留言
.Net Oauth2.0 第三方登录开发(Facebook ,LinkedIn )的更多相关文章
- 第三方登录开发-Facebook
这次这个项目要分别可以使用新浪微博,qq互联以及Facebook和Twitter授权登录 facebook目前只支持oauth2技术,个人理解其工作流程是当用户想访问当前网站,却不想注册账号,此时当前 ...
- OAuth2.0授权登录
最近工作中遇到了多系统间的授权登录,对OAuth2.0进行了学习研究,并总结备忘. [场景] 我们登录一些论坛等网站的时候,如果不想单独注册该网站账号,可以选择用微信或QQ账号进行授权登录. 这样的第 ...
- 淘宝账号基于OAuth2.0的登录验证授权登陆第三方网站
首先得有一个注册的appkey和App Secret 该流程分三个步骤: 第一步:通过用户授权获取授权码Code: 第二步:用上一步获取的Code和应用密钥(AppSecret)通过Https P ...
- 【第二十一篇】手C# MVC 微信授权登录 OAuth2.0授权登录
首先一定要熟读,最起码过一遍微信开发者文档 微信开发者文档 文档写的很清楚 授权登录四步走 在正文开始前,我得讲清楚一个事情 敲黑板,划重点:微信一共有两个 access_token 一个是7200就 ...
- 使用ShareSDK完成Facebook第三方登录和Facebook分享时没办法跳转到Facebook应用
楼主是通过cocoapod接入ShareSDK, 后来发现无论是使用fb分享还是登录, 都是跳出了网页认证(即使我的手机有安装了fb) 后来mob的技术客服小哥告诉我在构造分享参数的时候, 执行参数字 ...
- [Next] Next.js+Nest.js实现GitHub第三方登录
GitHub OAuth 第三方登录 第三方登录的关键知识点就是 OAuth2.0 . 第三方登录,实质就是 OAuth 授权 . OAuth 是一个开放标准,允许用户让第三方应用访问某一个网站的资源 ...
- 微信开放平台开发——网页微信扫码登录(OAuth2.0)
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...
- 第三方登录:微信扫码登录(OAuth2.0)
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...
- php微信开放平台--第三方网页微信扫码登录(OAuth2.0)
第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提 ...
随机推荐
- MVC的JsonResult用法
在Asp.net Mvc 2中由于对数据的保护,默认情况下request为post,所以在前端请求的时候则需要以post方式request action方法: public JsonResult Ge ...
- R语言之词云:wordcloud&wordcloud2安装及参数说明
一.wordcloud安装说明 install.packages("wordcloud"); 二.wordcloud2安装说明 install.packages("dev ...
- add .json handler support in IIS 7
Sometimes we need to create JSON in a text file with extension .json, however by default IIS 7 or an ...
- eclipse新建一个Android项目,就会报错android.support.v7.app.ActionBarActivity
解决方法: 今天被这个问题折腾了一下,最后终于找到了解决办法. 产生这个问题,是因为你升级了ADT到version 22,但是还需要升级SDK Tools,Platform Tools,Build T ...
- saiku 元数据存储分析
一.介绍 使用saiku的人一定对他的元数据存储都特别感兴趣,特别是有分布式管理需求的项目,更是迫切需要了解.其实它是使用Apache的开源项目Jackrabbit管理文件的! 二.代码跟踪 我也是使 ...
- is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.6 GB of 40 GB virtual memory used
昨天使用hadoop跑五一的数据,发现报错: Container [pid=,containerID=container_1453101066555_4130018_01_000067] GB phy ...
- jade模板引擎学习笔记(WebsStorm9.0.3+ nodejs+express+jade)
jade环境搭建 jade标签写法 jade注释 jade添加类名.id.属性 jade添加脚本,css jade变量 jade多行文本显示 jade流程代码:for,each,while jade流 ...
- 使用PowerDesigner导出Word/HTML的一些配置
目标:根据物理视图导出代码和列清单(包括字段.类型.注释).由于默认导出的要素太多,大多不是自己想要的,这里简单说下导出目标的一些配置,留下来备用. 其中,Title中的图和Table表格中的代码预览 ...
- Linux探秘之I/O效率
一.文章来由 最近看了<UNIX环境高级编程>,对以前比较模糊的一些知识结构又做了进一步的加强,特别是前两章讲到不带缓冲的文件I/O和带缓冲的标准I/O,对read.write.fread ...
- iOS开源项目教程大合集
UI篇 1.MMDrawerController http://www.cnblogs.com/shangdahao/p/3142204.html 2.SVPullToRefresh http://w ...