【问题标题】:HTTP Request with Oauth2 to Google App Script Web App使用 Oauth2 向 Google App Script Web App 发出 HTTP 请求
【发布时间】:2018-09-15 11:45:52
【问题描述】:
  1. 列表项

我创建了一个适用于 HTTP 请求的 Google App Script REST - 应用程序(以“script.google.com/”开头)。

当“所有人,甚至匿名”都可以使用该应用程序时,该应用程序运行良好,但是当我将其设置为仅对我的域可用 [编辑:] 或从作为 WebApp 发布/部署的“仅我自己”[/编辑] 时,我只能使用浏览器访问 Web 应用程序并登录,但不能使用 http 请求。

我尝试使用 Google OAuth Playground 和基于 Xamarin Auth Tutorial 的 Android 应用程序请求授权令牌。

这两种方法都为我提供了一个有效的授权令牌,我可以将其复制并粘贴到其他平台,以确认它正在处理对https://wwww.googlapis.com/plus/v1/people/me 的请求。

我可以使用浏览器访问 Web 应用程序并登录。现在,当我使用 http 请求调用我的脚本时,我得到以下结果:

"<HTML> <HEAD> <TITLE>Unauthorized</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>Unauthorized</H1> <H2>Error 401</H2> </BODY> </HTML>" 

我尝试使用另一个应用脚本调用 Web 应用:

var headers =  {
    "authorization": "Bearer [access_token]",
  };   
  var params = {
     method:"GET",
     contentType:"application/json",
     muteHttpExceptions:true,
     headers:headers,    
  };
  var url = "https://script.google.com/[rest_of_the_script_url]";
  var response = UrlFetchApp.fetch(url, params);

我还尝试使用 C# OAuth2Request(取自 Xamarin 教程)调用 Web 应用程序:

var url = "https://script.google.com/[rest_of_the_script_url]";
var request = new OAuth2Request("GET", new Uri(url), null, account );

我也尝试过 C# HttpWebRequest:

string accessToken = "Bearer [access_token]";
string url = "[https://script.google.com/[rest_of_the_script_url]";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.create(url);

request.Method = "GET";
request.ContentType = "application/json";
request.Headers.Add("Authorization", accessToken);

var response = request.getResponse();

之前的所有方法都有相同的结果:“(401) Unauthorized”。

对于我设置的范围:

https://www.googleapis.com/auth/plus.me 
https://www.googleapis.com/auth/userinfo.email

根据其属性,我的 WebApp 不需要任何范围。 [编辑:] 另外,为了确保它没有设置一个尽可能简单的 doGet() 方法:

function doGet(e)
{
   return ContentService.CreateTextOutput("success");
}

以前有人问过这个问题,但有些人找到了解决方案,有些人没有。我的答案也没有成功。

  1. I think my first attempt covers this one
  2. I tried to translate the Java answer to C#

好的,感谢您在这里阅读,希望有人能帮我解决这个问题,因为我的想法已经用完了(最终也没有时间了)。

编辑: 虽然这个问题已经解决并且被证明是一个范围问题,但我正在回答下面 cmets 中的问题,以防这个问题将来对任何人都有帮助。

【问题讨论】:

  • 您在相应的“将应用程序执行为:”下拉菜单中选择了什么?此外(尽管属性中缺少必需的范围......),您是否有可能调用在 doGet() 中返回 401 的东西?可能值得在这里精简为两行 doGet() 实现,看看它是否仍然可以复制:developers.google.com/apps-script/guides/web
  • FWIW,我能够通过上面引用的两行示例轻松重现这一点。现在我很感兴趣。
  • 你在哪里设置的? “当我将其设置为仅对我的域可用时”

标签: c# google-apps-script oauth-2.0 httprequest


【解决方案1】:

我能够使用在 Google OAuth Playground 中使用 https://www.googleapis.com/auth/drive.file 范围授权的访问令牌来使用它。

在我看来,这似乎不太正确,但这是我工作中最不被允许的范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2021-02-04
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多