为什么 Google 认为我的 Django 应用程序通过 SMTP (smtp.gmail.com) 发送电子邮件的请求不安全?阅读他们的安全标准并没有多大帮助:
更安全的应用程序如何帮助保护您的帐户当第三方应用程序符合我们的安全标准时,您可以:
在连接您的 Google 帐户之前,查看您授予该应用的帐户访问权限级别 让该应用仅访问您 Google 帐户的相关部分,例如您的电子邮件或日历 将您的 Google 帐户连接到该应用,而不暴露您的密码 断开与 Google 的连接随时从应用程序帐户
从 Django 发送电子邮件时这是一个非常常见的问题。有教程和stackoverflow 问题/答案(第二个答案)可以通过更改 Google 帐户中的设置以允许安全性较低的应用程序来“解决”此问题。我已经完成了这项工作,并且对此感到满意,直到我从控制对不太安全的站点的访问中读到此内容:
由于 Google 开始关闭 Google 帐户对安全性较低的应用程序的访问权限,因此强制选项不再可用。我们建议立即关闭安全性较低的应用程序访问。您应该开始使用安全性较低的应用程序的替代品。
随着 Google 逐渐不再允许安全性较低的应用访问 Google 帐户,您将收到有关影响您的更改的电子邮件通知。
当我尝试搜索“如何通过 Google 确保 Django 安全”或“为什么 Django 对 Google 来说显示为不安全的应用程序”时,我看到的结果反映了更多相同的指导:只需翻转开关即可允许 Google 帐户上的不安全应用程序。我想知道为什么 Django 被认为是不安全的,这样也许我可以将其配置为安全的。
编辑:我还没有验证这些步骤使 Django 成为一个“更安全的应用程序”。在此之前,使用应用程序密码可以让我关闭“允许安全性较低的应用程序”。实施起来非常简单。
我正在更新 G Suite Marketplace SDK 上的应用。过去只需在“应用程序配置”选项卡中更改脚本版本,然后单击“保存”即可。
现在它在页面顶部发布了一条警告说:
您的帐户与此云项目或应用不属于同一个域
和Save按钮是灰色的,不能点击。
错误图像可以在这里看到:
有什么问题,我应该去哪里检查和验证域?
我将 Gsuite 用作 Saml IDP,以在内部应用上对我组织的用户进行身份验证。
一切正常,除了一点:当我的一个用户仅使用他/她的个人帐户登录时,Google 将失败:
403 错误:app_not_configured_for_user
这是有道理的,因为该应用程序仅供内部用户使用,但我希望能够强制 Google saml 身份验证显示帐户选择器,即使用户已经登录到一个帐户,因为这对于 oauth2 是可能的使用 prompt=select_account。
任何方式与 SAML 具有相同的行为?
[编辑]我实际上设法通过使用实现了我想要的
https://accounts.google.com/AccountChooser/?continue= $SAML_REQUEST$
[编辑 2] 这是在 ruby on rails 中进行适配的代码片段(使用ruby-saml)
配置/初始化程序/saml_override.rb
module OneLogin
module RubySaml
class Authrequest < SamlMessage
GOOGLE_ACCOUNT_CHOOSER_URL = "https://accounts.google.com/AccountChooser?continue="
alias_method :old_create, :create
def create(settings, params = {})
self.old_create(settings, params)
@login_url = GOOGLE_ACCOUNT_CHOOSER_URL + CGI.escape(@login_url)
end
end
end
end
Run Code Online (Sandbox Code Playgroud) saml http-status-code-403 oauth-2.0 google-oauth google-workspace
我正在让 G Suite 与我的 django 站点一起工作,以便它将替换我主机的 SMTP 服务器。我在我的虚拟主机的配置面板中配置了我的域。结果,当我向 support@mysite.com 发送电子邮件时,我可以看到它已成功发送到 Google 帐户,这很棒。
我的应用程序设置为在有人尝试注册后发送确认电子邮件。
我已经完成了我认为使用 django 项目设置 G Suite 所需的所有步骤,但是当我的项目在有人注册后尝试发送确认电子邮件时,我仍然收到错误消息。具体来说,我在 Django 错误页面上看到以下内容:
SMTPServerDisconnected at /access/register/ Connection unexpectedly closed
Run Code Online (Sandbox Code Playgroud)
我已经完成了以下步骤:
1.我已经设置了 SMTP 中继服务 ( https://support.google.com/a/answer/2956491 ),这意味着我已经:
2.在我的 django 设置文件中,我使用了以下设置:
EMAIL_HOST = 'smtp-relay.gmail.com'
EMAIL_HOST_USER = 'support@mysite.com'
EMAIL_HOST_PASSWORD = '********'
DEFAULT_FROM_EMAIL = 'support@mysite.com'
SERVER_EMAIL = 'support@mysite.com'
EMAIL_PORT = 465
EMAIL_USE_TLS = False
Run Code Online (Sandbox Code Playgroud)
我还应该提到,通过以下设置,在我开始实施 G Suite 之前,我的应用程序能够在向虚拟主机的 SMTP 服务器注册后发送验证电子邮件,以便我知道应用程序的那部分工作正常。
EMAIL_HOST = 'smtp.mywebhost.com'
EMAIL_HOST_USER = 'admin'
EMAIL_HOST_PASSWORD = …Run Code Online (Sandbox Code Playgroud) 我想查询GSuite Admin SDK Directory API以返回组中的所有用户,在 Go 中,并作为 GCP 服务帐户进行身份验证(该脚本将在 Google Compute Engine VM 中或作为 Google Cloud Function 执行)。
我使用的服务帐户(我们称之为my-service-account@my-project.iam.gserviceaccount.com)已在 GSuite 中被授予必要的范围:
我还有一个 GSuite管理员帐户(我们称之为my-admin@my-domain.com)。该帐户将用于委派(请参阅有关委派的文档)。
我可以使用以下代码返回组中的所有用户(基于上面提供的链接中的代码,并且我删除了大部分错误处理以使代码更短):
package main
import (
"io/ioutil"
"log"
"os"
"golang.org/x/net/context"
"golang.org/x/oauth2/google"
admin "google.golang.org/api/admin/directory/v1"
)
func main() {
srv := createAdminDirectoryService(
os.Getenv("SERVICE_ACCOUNT_FILE_PATH"),
os.Getenv("GSUITE_ADMIN_USER_EMAIL"),
)
members := listUsersInGroup(srv, os.Args[1])
log.Println(members)
}
func createAdminDirectoryService(serviceAccountFilePath,
gsuiteAdminUserEmail string) *admin.Service {
jsonCredentials, _ := ioutil.ReadFile(serviceAccountFilePath)
config, …Run Code Online (Sandbox Code Playgroud) 我正在尽力按照 GSuite 的过时说明通过 AWS Route 53 托管区域(即域)将电子邮件路由到 Gmail。以下是过时的说明:
我按照说明设置了值:
我看到:
发生错误 错误
请求。
(InvalidChangeBatch 400:MXRRDATANotTwoFields(MX 记录没有 2 个字段)遇到“”)
所以它不允许我创建记录。
gmail mail-server amazon-web-services amazon-route53 google-workspace
将我的 google 套件帐户详细信息添加到 smtp 表单的正确方法是什么?这是安全问题吗?如果我设置了 SMTP 设置,它现在会从该帐户发送验证电子邮件链接吗?
另外,如果我有一个 gsuite 域,我还应该这样做还是应该通过 Firebase 验证来添加域?
我只是希望我的验证电子邮件看起来像是来自专业公司而不是沙盒无回复帐户。
我们目前正在开发一个 Django CRUB 风格的 Web 应用程序,其中多个“租户”每个都有自己的“成员”(链接到该租户的用户)、“课程”等。
我们希望包含“使用 google 登录”选项,因此转向 Django-allauth。大多数租户使用 Google G 套装并拥有自己的[name]@[tenant].com地址。
创建帐户后,用户将被分配给其租户,为了防止租户 B 的用户在租户 A 中创建帐户,我们添加了一个功能来检查电子邮件的域是否与域中的“域”字段匹配。租户对象。仅当确实发生这种匹配时,才会创建帐户。
然而,最近我们的一位租户开始使用超过 1 个电子邮件域,这要求我们更新代码和租户对象。(使代码处理多个电子邮件域,更改模型,以便租户可以拥有多个电子邮件域)
这让我们想知道是否有更好的方法来做到这一点 - 我们一直在调查谷歌是否提供了响应company_id,或者任何可以帮助我们识别电子邮件域之外的公司的信息。这些值可以帮助我们检查用户是否确实属于该租户,而无需不断检查/更新电子邮件域字段 - 但我们一直无法找到此类内容。
对这个类似的stackoverflow 问题的回答表明我们采用了与我们目前正在采取的方法类似的方法,但那是五年前的事了 - 这仍然是真正的最佳方法吗?
我需要从公司的G Suite帐户访问日历信息,以通过 API 与公司系统同步数据。
当我需要提供对我自己的数据的访问时,有一种相当简单的方法可以实现。使用 Oauth2,用户通过登录窗口允许 API 访问所请求的数据。
但在G Suite文档中,涉及管理员和公司数据时指示的路径涉及管理员访问admin.google.com,转到与安全相关的会话,并手动注册我的API,列出他想要授予的范围我访问。
与此类似,在Microsoft Graph中, 有一种方法可以请求域管理员的同意,其中使用 Oauth2 仅显示user consent/屏幕。admin consent
我想知道是否有一种方法可以在G Suite中获得这种类型的访问权限,而不需要最终用户采取如此复杂的步骤来使我的 API 正常工作。
更新: 这个问题最初于 2019 年发布,有谁知道此后是否发生了变化?
google-api google-authentication google-oauth google-workspace
我想通过 SendGrid 以编程方式发送电子邮件(从admin@mydomain.example.com),但该电子邮件的回复已发送至我的 Google Workspaces 收件箱admin@mydomain.example.com)。然后我想回复 Google Workspaces 的客户。
我能找到的与此最接近的问题是设置| G Suite + Sendgrid 用于交易电子邮件,但这是一个相当不同的用例。
admin@mydomain.example.com因此,在我的用例中,发送给客户的电子邮件将通过 SendGrid 或 Google Workspaces发送。
我的问题:
谢谢!
google-workspace ×10
django ×3
email ×2
gmail ×2
google-oauth ×2
firebase ×1
go ×1
google-api ×1
jwt ×1
mail-server ×1
mx-record ×1
oauth-2.0 ×1
python ×1
saml ×1
sdk ×1
sendgrid ×1
smtp ×1