如果提供商受信任,通过电子邮件地址识别OpenID用户是否安全?

Jak*_*les 7 security openid dotnetopenauth

我正在使用DotNetOpenAuth进行OpenID登录.Google的提供程序根据调用者的领域(主机名+端口)返回不同的ClaimedIdentifier.

根据OpenID身份验证回调与声明的标识符本身返回的电子邮件地址验证登录是否安全?即,如果我们在电子邮件上验证而不是声明的ID,用户是否可以伪造其电子邮件地址并因此获得对其他用户帐户的访问权限?

我认为只要提供商是可信的,这样就可以了 - 即我们可以信任Google不允许用户使用其他人的电子邮件地址登录.

And*_*ott 6

OpenID 2.0协议的安全模型是围绕声明的标识符构建的 - 而不是电子邮件地址.所以最好的方法是让你的Realm保持一致.如果你能做到这一点,那就是最好的方法.

将电子邮件地址存储在用户的表格中也是一个好主意,这样如果您的领域必须更改(可能您的公司是由另一个公司购买),您将能够迁移您的用户.但是,如果您打算这样做,您还应该在收到电子邮件地址时存储身份验证期间OP端点的内容,以便您知道是否可以信任它.

通常,完全信任电子邮件地址是不安全的.如果您信任提供商(在您的情况下为Google)为您提供经过验证的电子邮件地址,那么您可以信任该电子邮件地址,如果您确认它实际上是对用户进行身份验证的提供商. 这只能通过验证IAuthenticationResponse.Provider.Uri值是您信任的值来正确完成.不能仅仅通过提供仅因为OpenID的的"不请自来的断言"功能,该功能允许用户与任意供应商登录无论在UI什么RP提供了一个"登录与谷歌"按钮,隐式进行.由于声明的标识符和本地标识符之间存在差异,因此无法通过检查声明的标识符的域来完成.