您是否应该确认从外部登录提供商处获得的电子邮件地址?

Should you confirm email addresses obtained from external login providers?

我正在开发 .NET 应用程序,我已经设置了 facebook 的外部登录。 目前,当用户使用外部登录功能登录 Facebook 并且我的应用程序收到他的电子邮件地址时,我会创建一个新的用户帐户并认为电子邮件地址已验证。 (否则无法登录)

不过这是一个好习惯吗?是否有可能某些攻击者会中途更改电子邮件地址或其他什么?让用户使用外部登录提供商登录的最佳做法是什么?

非常感谢任何帮助,谢谢。

编辑:在 this 教程中,该人员向他从外部登录提供商处收到的电子邮件地址发送了一封确认电子邮件。然而,这对我来说似乎不切实际。这有点违背了简化日志的目的in/sign,而且我认为当我使用外部登录提供商自己登录时,我从来没有被要求确认我的电子邮件。

是否有可能某些攻击者会在中途更改电子邮件地址之类的?

否,因为您使用的是实现了 openid 或 oauth2 的 facebook。

在 oauth2 中,邮件及其密码是安全的,因为您不对其进行管理。这些由您的 oauth2 提供商管理(在您的情况下是 facebook)

此外,根据 google 中相同的 oauth2 flow,facebook、linkedin 等提供商不会向您发送电子邮件。它会向您发送 授权码 :

  • 使用转到您的 web.com
  • 用户被重定向到 https://www.facebook.com/v8.0/dialog/oauth?client_id={app_id}&redirect_uri={redirect_uri}
  • 如果用户之前未登录,oauth2 提供程序会提示登录
  • 用户接受同意书(下一个)
  • oauth2 提供商(在您的情况下是 facebook)最后,执行最终重定向到您的 web.com(使用之前注册的回调 url)发送授权代码:https://web.com?code=196da272-083c
  • 此代码是生成 access_token 所必需的,并且只能使用一次(另一次 http 调用)
  • 需要 access_token 才能获取电子邮件(另一个 http 调用)

唯一的攻击方法可能是尝试向 https://web.com?code=**** 发送伪造的授权码,但在下一步(将授权码交换为新的 access_token),facebook 将 return你是一个错误,因为攻击者无法创建真正的授权码。

确认邮件

正如您所说,如果您的网站允许用户使用某些社交网络登录,添加一个新的电子邮件确认步骤是不切实际的。更重要的是,facebook 允许使用 phone 号码而不是邮件。

但是在某些情况下(不在身份验证中)邮件可能是您的盟友:

  • 提供一个选项来提醒用户这样的事情:嗨,鲍勃,你的社交网络创建了一个新帐户...如果你没有,请点击以下...
  • 确认在以后的通知中使用的电子邮件地址