需求: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 )的更多相关文章

  1. 第三方登录开发-Facebook

    这次这个项目要分别可以使用新浪微博,qq互联以及Facebook和Twitter授权登录 facebook目前只支持oauth2技术,个人理解其工作流程是当用户想访问当前网站,却不想注册账号,此时当前 ...

  2. OAuth2.0授权登录

    最近工作中遇到了多系统间的授权登录,对OAuth2.0进行了学习研究,并总结备忘. [场景] 我们登录一些论坛等网站的时候,如果不想单独注册该网站账号,可以选择用微信或QQ账号进行授权登录. 这样的第 ...

  3. 淘宝账号基于OAuth2.0的登录验证授权登陆第三方网站

    首先得有一个注册的appkey和App Secret   该流程分三个步骤: 第一步:通过用户授权获取授权码Code: 第二步:用上一步获取的Code和应用密钥(AppSecret)通过Https P ...

  4. 【第二十一篇】手C# MVC 微信授权登录 OAuth2.0授权登录

    首先一定要熟读,最起码过一遍微信开发者文档 微信开发者文档 文档写的很清楚 授权登录四步走 在正文开始前,我得讲清楚一个事情 敲黑板,划重点:微信一共有两个 access_token 一个是7200就 ...

  5. 使用ShareSDK完成Facebook第三方登录和Facebook分享时没办法跳转到Facebook应用

    楼主是通过cocoapod接入ShareSDK, 后来发现无论是使用fb分享还是登录, 都是跳出了网页认证(即使我的手机有安装了fb) 后来mob的技术客服小哥告诉我在构造分享参数的时候, 执行参数字 ...

  6. [Next] Next.js+Nest.js实现GitHub第三方登录

    GitHub OAuth 第三方登录 第三方登录的关键知识点就是 OAuth2.0 . 第三方登录,实质就是 OAuth 授权 . OAuth 是一个开放标准,允许用户让第三方应用访问某一个网站的资源 ...

  7. 微信开放平台开发——网页微信扫码登录(OAuth2.0)

    1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...

  8. 第三方登录:微信扫码登录(OAuth2.0)

    1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...

  9. php微信开放平台--第三方网页微信扫码登录(OAuth2.0)

    第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提 ...

随机推荐

  1. 转:ecshop商品分类页获取相册列表方法

    ecshop商品分类页获取相册列表方法 很久之前就看到过你好在商品列表页有获取到相册列表,但是一直没有实践过,感觉应该挺简单的吧,但是最近手上的项目刚好就需要这个功能,然后就想到网上查下资料,至少找个 ...

  2. Console中加入招聘等个性化信息

    try { if (window.console && window.console.log) { console.log("%c XX息科技 ", "f ...

  3. Win10下E3-1231 V3开启Intel虚拟化技术(vt-x)安装HAXM

    硬件配置: 技嘉G1 Sniper B6主板,Intel Xeon E3-1231 V3 CPU.主板和U都支持Intel的虚拟化技术,也在主板的设置界面打开了虚拟化支持,如下图: 使用CPU-V检测 ...

  4. 关于stacking context和CSS z-index的总结

    HTML中决定元素叠加顺序的CSS属性最有名的应该是z-index了.但是,往往在项目中发现有些情况和我们的预期不太一致.经过研究和学习,总算搞清楚了其中的关系.简单总结如下: 只有Positione ...

  5. UML 六种关系

    .继承, 男人 和 人 的关系2.实现, 孕妇 和 生宝宝 的关系3.依赖, 人 和 大米.水4.关联, 男人 和 工作5.聚合, 弱整体和部分, 轮子和车6.组合, 强整体和部分, 眼睛和人 参考: ...

  6. Oracle10g新特性——正则表达式 - 转

    在进行查询时,有时候需要按照一定的特殊规则来查找某个字符串,比如,你可能需要查询第三位为5-8,最后四位为’8888’的所有电话.在9i之前,你可能需要写一个很复杂的条件:Select usernam ...

  7. merge 实现

    今天写了个小程序,做两个已经从小到大排序好的数据的merge. 要求: listA = (1, 3, 5, 10); listB = (4, 6, 12):listA 和listB都是排序由小到大的列 ...

  8. MarkDown写blog(测试)

    区块元素 段落和换行 一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定义是显示上看起来像是空的,便会被视为空行.比方说,若某一行只包含空格和制表符,则该 ...

  9. c# socket 解决粘包,半包

    处理原理: 半包:即一条消息底层分几次发送,先有个头包读取整条消息的长度,当不满足长度时,将消息临时缓存起来,直到满足长度再解码 粘包:两条完整/不完整消息粘在一起,一般是解码完上一条消息,然后再判断 ...

  10. 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:

    php 5个版本,5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql extens ...