代码之家  ›  专栏  ›  技术社区  ›  Sam Saffron James Allen

如何在请求完成时验证openid.op_端点

  •  2
  • Sam Saffron James Allen  · 技术社区  · 16 年前

    我的网站上有一个开放的基于身份的身份验证系统。

    偶尔,用户会在 foo@gmail.com 他们将尝试使用google open id提供程序登录 https://www.google.com/accounts/o8/id ,在这种情况下,我希望自动关联帐户并将其登录。

    当这个过程完成后,我从某个地方得到一个有效载荷,声称 openid.op_endpoint=https://www.google.com/accounts/o8/id .

    我的问题是:

    • 我能相信吗 openid.op_endpoint 对吗?恶意openid提供程序能以某种方式欺骗它吗?

    举例来说,假设有人输入 http://evil.org 作为他们的openid提供者,我能不能最终得到一个声称 openid.op_终结点 是谷歌吗?我是否需要根据nonce存储额外的信息以进行验证?

    kind of tricky 理解

    1 回复  |  直到 16 年前
        1
  •  1
  •   Andrew Arnott    16 年前

    是和否。不,你不应该相信任何越界的东西,包括 openid.op_endpoint . 但是,如果您使用的是安全的OpenID库,则在允许用户登录您的站点之前,会验证此参数。事实上,OpenID规范确实提供了一种方法来验证这个参数和其他参数,而没有验证的话,验证协议就比无用还要糟糕。

    至于以这种方式链接账户,这是一个很好的方法,因为谷歌只会发送电子邮件地址,它知道是真正由用户控制。如果您已经要求您的用户执行电子邮件验证步骤,则链接帐户是安全的。但是,如果你为用户提供的电子邮件地址从未被验证过,那么你不能基于此匹配链接帐户,否则我可以通过创建一个具有其他人电子邮件地址的帐户来劫持其他人的帐户,然后等待他们使用OpenID登录,现在我可以进入他们的帐户。