2009-04-13 69 views
2

我正在嘗試使用OpenID來允許我通過Google登錄到我的網站。最終它會被訪問者使用,但現在它只是被硬編碼爲Google來驗證我自己的登錄。DotNetOpenId ClaimedIdentifier - 對此進行硬編碼是否安全?

我的代碼如下所示:

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. 它是安全的硬編碼存在(它是祕密嗎?如果用戶沒有看到它,會是comprimise什麼?用戶能夠建立?只能谷歌的原因ClaimedIdentifiers開始與他們的網址是什麼?)

我試過了文檔,但它們有點稀疏,而且我無法找到這些問題的答案。

**編輯:**我可能回答了我自己的問題。我在我的網站上使用了一個元標記(openid.delegate),這樣我就可以使用我的博客URL而不是一個令人討厭的Google網址登錄。當我通過Google登錄時,它會將ClaimedIdentifier返回爲我的博客網址。這讓我想,任何人都可以登錄我的登錄頁面,以自己的Google帳戶登錄,然後用我自己的ClaimedIdentifier將它們返回到我的博客。

  1. 當ClaimedIdentifier看起來很容易僞造時,我該如何驗證用戶?

回答

4

是,存儲聲明的標識符是安全的,並且該值已經不是祕密了,所以如果那裏的claims_id值泄漏的代碼不是安全性的折衷。

是的,它必須始終相同,否則用戶無法重新獲得他們創建的帳戶的訪問權限。話雖如此,谷歌的獨特之處在於,如果Realm URL在您的網站上發生變化,Google會開始將所有新的claims_id發送到您的網站。所以只要領域保持不變,claim_id也是如此。由於您使用的是DotNetOpenId,因此默認領域只是您的網站根網址,所以它可能會保持不變,除非您更改您的網站託管的網址。

正如您已經確定的那樣,claim_id不容易被僞造。如果是這樣,那麼OpenID確實是無用的。

+0

感謝您的迴應 - 我現在感覺更安全! :D 我確信它必須是安全的(或者正如你所說,openID將是無用的),但我不確定claim_id是否是一次性的臨時令牌(原始的Google看起來有點隨機)。現在一切都很清晰:) – 2009-04-14 18:56:14

1

多管閒事(和有一個朋友嘗試登錄我),我想我找到了答案......

在我的網站的標籤包括我的谷歌用戶名,如果我嘗試作爲一個不同的用戶使用我的博客URL登錄請求,它似乎失敗了(在谷歌不發送我回到我登錄到的網站,而不是它發回我的失敗)。

這讓我覺得,我回自己的URL作爲ClaimedIdentity 安全,不能被僞造,等等,等等

相關問題