繁体   English   中英

正确且安全地登录(登录)到部署为 Web 应用程序的 Google Apps 脚本项目

[英]Proper and safe Sign-in (login) to Google Apps Script project deployed as web app

我正在处理将作为 webapp 部署的 Google Apps 脚本项目(可以绑定到电子表格或独立),我想根据以下内容授予用户访问权限

  • 1)某些用户的Google 登录(某些用户将被授予访问权限或某些用户将被阻止访问)
  • 2)其他人的用户名/密码

1) 谷歌登录

我发现它比我想象的更棘手。 我希望存在一些简单的功能/方法,可以让它像我想要的那样工作,谷歌保证安全级别。 我首先发现的是: https : //developers.google.com/identity/sign-in/web/ 首先它看起来很简单,所以我尝试实现以下代码:https ://developers.google.com/identity/sign-in/web/build-button ,但在填写content="YOUR_CLIENT_ID.apps.googleusercontent.com"后我陷入了content="YOUR_CLIENT_ID.apps.googleusercontent.com" 我从Google Cloud Platform部分Credentials填写了正确的CLIENT_ID并尝试登录到我发布的项目。 我懂了:

错误:redirect_uri_mismatch

请求中的 JavaScript 来源https://n-__________________________________-script.googleusercontent.com与为 OAuth 客户端授权的来源不匹配。 访问https://console.developers.google.com/apis/credentials/oauthclient/____________.apps.googleusercontent.com?project=_____以更新授权的 JavaScript 来源。

因此,我复制了第一个链接,然后将googleuser.com放入Authorized domains ,然后将该链接粘贴到Authorized JavaScript origins 但我不允许保存它,这突然出现:

错误

您无权执行此操作。

跟踪号:c411401060

我不知道为什么。 几个月前,类似的事情还不是问题。 我想这与 Google 的新限制范围政策有关。 我试图让它适用于绑定和独立项目,结果没有区别。 所以最后(部分是因为这个架构: https://developers.google.com/identity/sign-in/web/server-side-flow : https://developers.google.com/identity/sign-in/web/server-side-flow )我得出的结论是,网站登录的整个概念不是旨在用于已发布的 Apps 脚本项目。

a) 我错了吗? 如果没有,我该如何使它工作?

b) 为什么我收到错误 - 跟踪号:c411401060? 有人知道吗?

所以我继续在其他地方寻找解决方案。 我发现的最相似的问题是这里Google app script web app, how to create a login button? . 但是它已经超过三年了,答案不是很令人满意(或者我不理解它们):

c) 我是否真的必须同时发布多个项目才能为某些有 Google 帐户的用户和某些没有 Google 帐户的用户授予访问权限? 用户登录后,如何退出? 没有一种简单的方法可以可靠地检查用户 ID 或 gmail 吗?

d)有人有代码的工作示例吗? 作为初学者,我会非常欣赏示例,因为我敢打赌,如果有一个简单的解决方案,我已经阅读过它,但我没有注意到它是我需要的。


2) 用户名​​/密码

尽管已有 10 年的历史,但我发现阅读此基于表单的网站身份验证权威指南很有用。 或者至少我不知道更好的文章从哪里开始。 链接赞赏。

我关于如何进行用户名/密码登录的想法是,我将创建一个由用户通过google.script.run调用的服务器端函数,该函数将检查用户名和密码的有效性。 a) 安全吗? 现在当用户登录时,我可以让 webapp 工作吗? 我的意思是用户发送了用户名和密码,所以该应用程序将继续工作而不涉及其他技术? b) 或者,如果在登录后我让某些服务器端函数生成一个随机字符串,该字符串将被发送到客户端并作为会话的令牌,我会让应用程序更安全吗?


最佳实践、提示、代码、来源表示赞赏!

谢谢

我可以给你第一个问题的答案。

1)Google登录。 在您开始添加此Google Oauth2 链接之前

1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF

这将解决一些登录问题

除了需要在云控制台中添加默认的Apps脚本ID之外,还需要添加新的OAuth 2.0客户端ID,并且还应从API控制台启用所需的API。

在应用脚本ID中,您可以添加以下网址https://script.google.com/oauthcallback

在授权的回调网址下

之后,您可以在新创建的oauth客户端中添加脚本应用程序网址,例如重定向网址

https://script.google.com/d/projectid/usercallback

复制后,将新创建的Oauth的客户端ID和客户端密钥粘贴到您的项目中。

不幸的是,Bitz Trail 答案不再有效。 不再可能在“OAuth 2.0 客户端 ID”的“授权重定向 URI”中添加 google WebApp 的来源

有关更多详细信息,请参阅此链接。 为什么 webapp 不能再使用客户端身份验证

但是,在 googleissue tracker 中,提到了这个 repo,其中有一篇关于如何使用服务器端身份验证的完整文章

< sp...@easton-consulting.com > 2021 年 6 月 4 日 - 对于仍在为此苦苦挣扎的任何人,我从客户端身份验证转移到服务器端 OAuth 流程。 查看 repo @ https://github.com/googleworkspace/apps-script-oauth2我在弹出框中启动登录页面,因此流程对用户来说很自然。 (检查窗口,打开选项)唯一的缺点是在接受范围后,用户被重定向回他们必须关闭的弹出框,但至少由于重定向是针对您的脚本,您可以提供非常好的确认/入职页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM