0

我已经阅读并阅读并使用了这段代码,但我仍然无法弄清楚如何获取刷新令牌。这在 c#

我尝试了 access_type、prompt 和approval_prompt 参数的不同组合。我一直在撤销我的用户对应用程序的访问权限,因此当请求身份验证代码时,它确实要求我自己批准应用程序才能访问。

我只想获取刷新令牌,以便我可以存储它并保持刷新。

这是下面的代码。我已经删除了获取身份验证代码的部分,但如果需要,我可以添加。我想知道是否有人可以简单地发现一些简单的错误。

        string GetJsonFromAPICall(string p_url,string p_post_data, string p_b64_id_secret)
            {
                //string C_TOKEN_URL = "https://oauth2.googleapis.com/token";
                string l_auth_string = "Basic " + p_b64_id_secret;
    
                print("p_post_data = ", p_url + "?"+p_post_data);
                print("Authorization", l_auth_string);
                HttpWebRequest request = WebRequest.Create(p_url) as HttpWebRequest;
    
                string postData = p_post_data;// "grant_type=authorization_code&code=" + p_auth_code + "&redirect_uri=" + p_redirect_url;
                request.Headers.Add("Authorization", l_auth_string);
                
    
    
                var data = Encoding.ASCII.GetBytes(postData);
    
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length;
    
                print("pos 20 in GetJsonFromAPICall");
                print("length ", data.Length.ToString());
    
                using (var stream = request.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }
                var response = (HttpWebResponse)request.GetResponse();
                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    
                return responseString;
            }    

 

string getAccessToken(string p_b64_id_secret, string p_auth_code, string p_redirect_url)
                {
                    //string l_url = "client_id="+ p_C_GBQ_ONLINE_APP_APP_CLIENT_ID + "&client_secret="+ p_C_GBQ_ONLINE_APP_APP_CLIENT_SECRET + "access_type=offline&prompt=consent&grant_type=authorization_code&code=" + p_auth_code + "&redirect_uri=" + p_redirect_url;
                    string l_params = "grant_type=authorization_code&code=" + p_auth_code + "&redirect_uri=" + p_redirect_url;
                    l_params += "&access_type=offline";
                    l_params += "&prompt=consent";
                    l_params += "&approval_prompt=force";
        
                    //return GetJsonFromAPICall("https://oauth2.googleapis.com/token", l_params, p_b64_id_secret);
                    return GetJsonFromAPICall("https://www.googleapis.com/oauth2/v4/token", l_params, p_b64_id_secret);
                
                }


    var credentials = string.Format("{0}:{1}", C_GBQ_ONLINE_APP_APP_CLIENT_ID, C_GBQ_ONLINE_APP_APP_CLIENT_SECRET_ID);
    var b64_id_secret = Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials));

    string l_auth_code = "xxxxx"; // worked out successfully earlier  
    
    l_json_returned = getAccessToken(p_b64_id_secret, l_auth_code, C_GBQ_ONLINE_APP_REDIRECT_URL);

返回的json是

l_json_returned = : {
  "access_token": "FFFFFFFF",
  "expires_in": 3569,
  "scope": "https://www.googleapis.com/auth/cloud-platform.read-only https://www.googleapis.com/auth/bigquery",
  "token_type": "Bearer"
}
4

0 回答 0