2

我正在尝试使用 OpenID 来允许我通过 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 导致以他们的 url 开头的 ClaimedIdentifiers 吗?)

我已经尝试过这些文档,但它们有点稀疏,我无法找到这些问题的答案。

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

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

2 回答 2

4

是的,存储 Claimed Identifier 是安全的,并且该值不是秘密的,因此如果其中包含 claim_id 值的代码被泄露,这不是安全妥协。

是的,它必须始终相同,否则用户无法重新获得对他们创建的帐户的访问权限。话虽如此,Google 的独特之处在于,如果您的网站的 Realm URL 发生变化,Google 会开始将所有新的 claim_id 发送到您的网站。所以只要领域保持不变,claim_id 也会保持不变。由于您使用的是 DotNetOpenId,因此默认领域只是您的网站根 URL,因此除非您更改托管网站的 URL,否则它可能会保持不变。

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

于 2009-04-13T21:39:10.607 回答
1

在搞砸了很多事情之后(并且有一个朋友尝试以我的身份登录),我想我有答案了......

我网站中的标签包含我的 Google 用户名,如果我尝试使用我的博客 URL 以其他用户身份登录请求,它似乎失败(在 Google 中没有将我发送回我正在登录的网站,而不是它将我退回失败)。

这让我认为返回我自己的 url 作为 ClaimedIdentity安全的,不能被伪造等等。

于 2009-04-13T19:50:38.247 回答