DotNetOpenId ClaimedIdentifier - 对此进行硬编码是否安全?

时间:2009-04-13 18:15:22

标签: openid dotnetopenauth

我正在尝试使用OpenID来允许我通过Google登录我的网站。最终它会被访问者使用,但是现在它只是硬编码为Google来验证我自己的登录信息。

我的代码如下所示:

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. 在那里进行硬编码是否安全(它是秘密的吗?如果用户确实看到了它,那会不会有什么影响?用户可以伪造吗?只有Google可以使ClaimedIdentifiers以他们的网址开头吗?)< / p>

  3. 我已经尝试了这些文档,但它们有点稀疏,我很难找到这些问题的答案。

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

    1. 当ClaimedIdentifier看起来如此容易伪造时,我应该如何验证用户?

2 个答案:

答案 0 :(得分:4)

是的,存储声明的标识符是安全的,并且该值不是保密的,因此如果那个带有claim_id值的代码泄露,则不会造成安全性损害。

是的,它必须始终相同,否则用户无法重新获得对其创建的帐户的访问权限。话虽这么说,谷歌的独特之处在于,如果您的网站改变了域名,Google会开始向您的网站发送所有新的claim_id。因此,只要领域保持不变,claim_id也将如此。由于您使用的是DotNetOpenId,因此默认领域只是您的网站根网址,因此除非您更改网站所在的网址,否则它可能会保持不变。

正如您所确定的那样,claim_id不能那么容易伪造。如果是,那么OpenID真的没用。

答案 1 :(得分:1)

经过多次搞乱(并让朋友尝试以我身份登录),我想我有答案......

我网站上的标记包含我的Google用户名,如果我尝试使用我的博客网址以不同的用户身份登录请求,则会失败(在Google中没有将我发回我登录的网站,而不是让我失败了。)

这让我觉得返回我自己的网址,因为ClaimedIdentity 是安全的,不能伪造等等。