2012-12-27 61 views
0

我瀏覽過DotNetOpenAuth的文檔,找不到基於ClaimedIdentifier的身份驗證提供程序類型的方法。我正在尋找類似於以下方法:使用聲明標識符檢索身份驗證提供程序類型

ProviderType providerType = ClaimedIdentifier.Parse(" .... ").Type; 

是否有一種方法來檢索提供程序類型?

查詢DotNetOpenAuth來檢索這些信息,而不是在應用程序中維護一個狀態變量或將該類型作爲查詢字符串參數傳遞,這將非常棒。雖然,它看起來像這可能是必要的...

+0

什麼是「供應商類型」?這不是OpenID規範定義的術語。 –

+0

我要去的是,會給我一個「運營商名稱」給予ClaimedIdentifier'string'(即谷歌,雅虎等)的方法。 – culturalanomoly

回答

1

不解析聲明的標識符來揣摩提供商。雖然這可能適用於常見的情況,但有些情況下會失敗,並且您也可能打開自己進行攻擊。

您獲得從IAuthenticationRequest實例的ClaimedIdentifier。該接口也有一個Provider屬性,上面有一個Uri屬性返回IProviderEndpoint實例。此URI屬性是如何你應該意識到,你特別感興趣的供應商,以便例如:

public void Login(string userSuppliedIdentiifer, OpenIdRelyingParty rp) { 
    IAuthenticationRequest request = rp.CreateRequest(userSuppliedIdentifier; 
    if (request != null) { 
     if (request.Provider.Uri == new Uri("https://www.google.com/o8/ud")) { 
      // It's Google! 
     } else if (request.Provider.Uri == new Uri("https://me.yahoo.com/whatever-it-is")) { 
      // It's Yahoo! 
     } 

     request.RedirectToProvider(); 
    } 
} 

我希望這有助於。

+0

+1對,並感謝您花時間創建此API!這是我目前正在採取的方法。儘管如此,我認爲這種檢查應該更多地關注API而不是客戶端代碼(管理URI以及將來可能會改變的潛力)。如果我在我的代碼中執行該檢查,那麼API和我的客戶端代碼可能會「不同步」。如果我可以調用一個屬性/方法來檢索提供者的「友好名稱」,那將會很棒。在一個供應商的URI變化的情況下,所有我需要做的就是更新DotNetOpenAuth ... – culturalanomoly

+0

或最新版本,是完全DotNetOpenAuth不可知的提供者,只負責執行OpenAuth請求/響應?在這種情況下,管理提供者URI的責任將由客戶負責? – culturalanomoly

+1

對。 DotNetOpenAuth是一個嚴格的協議庫。它沒有任何提供商或EP的特殊字符串。但我懷疑Google會改變他們的URI,因爲很多人都在做你現在正在做的事情。 –

1

我試圖找到類似的東西,以確定提供者從返回,但到目前爲止,我剛剛做了這樣的事情,反應。 Provider.Uri.ToString()。包含(「yahoo」),用於雅虎。如果有更好的東西會有幫助,這似乎很俗氣,但它是我現在唯一可以使用的東西。

相關問題