.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

第一次发博客 ,有疑问或者有建议的请留言

时间: 2024-10-12 14:57:44

.Net Oauth2.0 第三方登录开发(Facebook ,LinkedIn )的相关文章

第三方登录开发-Facebook

这次这个项目要分别可以使用新浪微博,qq互联以及Facebook和Twitter授权登录 facebook目前只支持oauth2技术,个人理解其工作流程是当用户想访问当前网站,却不想注册账号,此时当前网站有其它主流网站的第三方登录支持功能,即使用当前站的合作网站的账号密码去第三方合作网站验证用户的合法性,验证成功则允许登录当前站点,无需知道第三方的账号密码.      开发前需要先注册一个facebook的应用,这样可以得到类似密钥的两个值,client_id和client_secret,这两个

OAuth2.0授权登录

最近工作中遇到了多系统间的授权登录,对OAuth2.0进行了学习研究,并总结备忘. [场景] 我们登录一些论坛等网站的时候,如果不想单独注册该网站账号,可以选择用微信或QQ账号进行授权登录. 这样的第三方登录方式到底是怎么实现的呢?难道是腾讯把我们微信或QQ账号信息卖给了这些网站?很显然,腾讯是不会这么干的,这种登录方式的实现,其实就是使用的OAuth2.0的授权登录方式. 类似地,在公司内部,如果公司有多套不同的软件系统,例如公司内网的财务报销系统.考勤系统.报销系统.人事系统等,也可以实现一

OAuth 2.0 . 第三方 登录 (新浪微博、腾讯QQ)

首先 去 QQ互联.新浪微博开放平台. 申请应用 成功: 注:在 申请应用时  会有<meta property="qc:admins" content="113133650471167627000636" /> 验证 把这段代码粘贴 到你的网站根目录默认访问的文件里的head头信息中.113133650471167627000636 为 应用序列号 每次申请应用和修改 地址等 都会发生变化 如果  不操作 这块代码 就不会检测成功 应用申请不会成功 新

微信企业号-- OAuth2.0验证.net开发

在做企业号 OAuth2.0验证 的时候走了一些弯路,在这里记录一下. 当我查官方的接口文档的时候就给了一下代码: 企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0验证接口来获取成员的身份信息. 通过此接口获取成员身份会有一定的时间开销.对于频繁获取成员身份的场景,建议采用如下方案: 1.企业应用中的URL链接直接填写企业自己的页面地址 2.成员跳转到企业页面时,企业校验是否有代表成员身份的cookie,此cookie由企业生成 3.如果没有获取到cookie,

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

首先得有一个注册的appkey和App Secret 该流程分三个步骤: 第一步:通过用户授权获取授权码Code: 第二步:用上一步获取的Code和应用密钥(AppSecret)通过Https Post方式换取Token. 第三步:获取用户Nick或者其他信息 第四步:保存session信息 一.获取授权码Code应用在要求获取用户信息的时候,首先引导用户(Redirect)到登录授权页面https://oauth.taobao.com/authorize 需要传的参数有 名称  是否必需  描

oAuth 2.0 第三方登录详细介绍(github)

流程图如下: 说明:本文以github登录为例 注册github账号,登录后在个人信息页面一次点击Applications>Developer applications>Register a new application弹出如下界面 前三项就依据个人应用添加      最好callback URL 就是回调的地址了   添加对应平台的接口  github允许填写本地连接地址(开发中直接填http://127.0.0.1:8080/xxx/xxx   这个地址要和授权的时候的传入的地址参数一致

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

GitHub OAuth 第三方登录 第三方登录的关键知识点就是 OAuth2.0 . 第三方登录,实质就是 OAuth 授权 . OAuth 是一个开放标准,允许用户让第三方应用访问某一个网站的资源,而不需要提供账号和密码. 总体就是:myapp <===> user <===> github 授权的总体流程 用户进入到我的网站,我想要获取到用户的 GitHub 信息 跳转到 GitHub 授权页面,然后问用户是否允许我获得他的信息,授予权限 同意,我的网站会获得 GitHub

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

第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据.每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频).这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的

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

.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据.每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频).这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问