我正在使用DotNetOpenAuth进行OpenID登录。 Google的提供程序根据调用者的领域(主机名+端口)返回不同的ClaimedIdentifier。
根据OpenID身份验证回调与声明的标识符本身返回的电子邮件地址验证登录是否安全?即,如果我们通过电子邮件验证而不是声明的ID,用户是否可以伪造其电子邮件地址并因此访问其他用户的帐户?
我认为只要提供商信任就可以 - 即我们可以信任Google不允许用户使用其他人的电子邮件地址登录。
答案 0 :(得分:6)
OpenID 2.0协议的安全模型是围绕声明的标识符构建的 - 而不是电子邮件地址。所以最好的方法是让你的Realm保持一致。如果你能做到这一点,那就是最好的方法。
将电子邮件地址存储在用户的表格中也是一个好主意,这样如果您的领域必须更改(可能您的公司被另一个人购买),您就可以迁移你的用户。但是,如果您打算这样做,您还应该在收到电子邮件地址时存储身份验证期间OP端点的内容,以便了解您是否可以信任它。
通常,完全信任电子邮件地址是不安全的。如果您信任提供商(在您的情况下为Google)为您提供经过验证的电子邮件地址,那么您可以信任电子邮件地址,如果您确认它实际上是对用户进行身份验证的提供商。 这只能通过验证IAuthenticationResponse.Provider.Uri
值是您信任的值来正确完成。只有提供“使用Google登录”才能隐式执行 “按钮是因为OpenID的”未经请求的断言“功能,它允许用户使用任意提供者登录,无论RP在其UI中提供什么。由于声明的标识符与本地标识符之间存在差异,因此无法通过检查声明的标识符的域来完成此操作。
答案 1 :(得分:2)
在我的比较中使用电子邮件之前,我确认声明的ID确实是谷歌ID。那也是how StackOverflow does it。