代码之家  ›  专栏  ›  技术社区  ›  Danny Tuppeny

DotNetOpenId ClaimedIdentifier-硬编码是否安全?

  •  2
  • Danny Tuppeny  · 技术社区  · 15 年前

    我正试图利用OpenID允许我通过谷歌登录我的网站。最终它将被访问者使用,但目前它只是硬编码为谷歌,仅用于验证我自己的登录。

    我的代码如下所示:

    var openId = new OpenIdRelyingParty();
    
    // If we have no response, start
    if (openId.Response == null)
    {
        // Create a request and send the user off
        openId.CreateRequest("https://www.google.com/accounts/o8/id").RedirectToProvider();
    }
    else
    {
        // We got a response - check it's valid
        if (openId.Response.Status == AuthenticationStatus.Authenticated
            && openId.Response.ClaimedIdentifier == "blah_blah")
        {
        }
    }
    

    1. 运行一次是否安全,捕获ClaimedIdentifier并将其放入其中。它会永远是一样的吗?

    2. 在那里硬编码安全吗(这是秘密吗?如果用户确实看到了它,这会造成什么后果吗?用户可以伪造它吗?只有谷歌才能导致以url开头的ClaimedIdentifiers?)

    **编辑:*我可能已经回答了我自己的问题。我在我的网站(openid.delegate)上使用了一个元标记,这样我就可以使用我的博客url而不是讨厌的谷歌url来登录。当我通过谷歌登录时,它会返回ClaimedIdentifier作为我的博客url。这让我觉得任何人都可以进入我的登录页面,以他们自己的谷歌账户登录,然后用我自己的ClaimedIdentifier将他们返回到我的博客。

    1. 当ClaimedIdentifier看起来很容易伪造时,我应该如何验证用户?
    2 回复  |  直到 15 年前
        1
  •  4
  •   Andrew Arnott    15 年前

    是的,存储声明的标识符是安全的,并且该值不是秘密的,因此,如果其中包含声明的id值的代码被泄漏,则不会对安全造成危害。

    是的,它必须始终相同,否则用户无法重新获得对他们创建的帐户的访问权。这就是说,谷歌的独特之处在于,如果你的网站的域名发生变化,谷歌将开始向你的网站发送所有新的域名。因此,只要域保持不变,那么声明的\u id也会保持不变。由于您使用的是DotNetOpenId,默认域只是您的网站根URL,因此除非您更改网站承载的URL,否则它可能会保持不变。

    正如您所确定的,声明的身份证不可能如此容易伪造。如果是这样的话,那么OpenID真的毫无用处。

        2
  •  1
  •   Danny Tuppeny    15 年前

    我的网站中的标签包括我的谷歌用户名,如果我尝试以其他用户身份使用我的博客url登录请求,它似乎会失败(在谷歌中,不会将我发送回我登录的网站,而不是将我发送回失败的网站)。

    这使我认为返回我自己的url作为ClaimedIdentity 安全、不可伪造等。