如何在 C# 中从 Facebook SDK 获取当前用户访问令牌?不是应用访问令牌

Posted

技术标签:

【中文标题】如何在 C# 中从 Facebook SDK 获取当前用户访问令牌?不是应用访问令牌【英文标题】:How to get current user access token from Facebook SDK in C#? Not the App access token 【发布时间】:2018-11-20 09:58:54 【问题描述】:

下面的代码展示了获取App Access Token

public static string GetAppAccessToken()
    
        var fb = new FacebookClient();

        dynamic result = fb.Get("oauth/access_token", new
        
            client_id = "****************",
            client_secret = "*******************",
            grant_type = "client_credentials"
        );

        return result.access_token;
    

但是如何使用 Facebook SDK 使用 C# 获取 当前登录用户的访问令牌

【问题讨论】:

你为什么要那个?我希望这是在用户和 facebook 之间。为什么你会担心? 这样我就可以使用该访问令牌来获取当前登录用户的信息... 用户是否允许您这样做? @Adyson 正在尝试使用 c# 将内容发布到 facebook,以便如果我从 facebook SDK 获取用户访问令牌,我可以轻松发布内容... 如果你想获取email,name,id,pictureurl,你不需要获取用户访问令牌。应用访问令牌就足够了 【参考方案1】:
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Script.Serialization;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Facebook;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;    

        public class AccessUser
        
            public string access_token  get; set; 
            public string token_type  get; set; 
            public string expires_in  get; set; 
        

        private void CheckAuthorization()
            
                string app_id = "**************";
                string app_secret = "************************";

                if (Request["code"] == null)
                
                    var redirectUrl = string.Format("https://graph.facebook.com/oauth/authorize?client_id=0&redirect_uri=1", app_id, Request.Url.AbsoluteUri);
                    Response.Redirect(redirectUrl);
                
                else
                
                    AccessUser au = new AccessUser();

                    string url = string.Format("https://graph.facebook.com/v3.2/oauth/access_token?client_id=0&redirect_uri=1&client_secret=2&code=3", app_id, Request.Url.AbsoluteUri, app_secret, Request["code"].ToString());

                    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

                    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                    
                        StreamReader reader = new StreamReader(response.GetResponseStream());
                        string vals = reader.ReadToEnd();
                        au = JsonConvert.DeserializeObject<AccessUser>(vals);
                        string token = au.access_token;

                    
                
            

以上代码将返回用户令牌。

注意:使用 aspx 页面构建,这是基于 V3.2 Graph API 调用。像 1 和 2 这样的版本,我们需要在 URI 中发送 Scope

如果有人需要源代码,请告诉我...

【讨论】:

@GertArnold 完成。

以上是关于如何在 C# 中从 Facebook SDK 获取当前用户访问令牌?不是应用访问令牌的主要内容,如果未能解决你的问题,请参考以下文章