2016-03-23 66 views
4

我正在調查在ASP.NET(MVC Core 1.0)中使用基於聲明的授權。在設置ClaimsIdentity時,我提供了一個鍵/值字符串對列表來表示每個Claim。例如:要求類型的ASP.NET要求

List<Claim> claims = new List<Claim> 
{ 
    new Claim("UserID", user.ID), 
    new Claim("Name", user.Name), 
    new Claim("Role", "basic") 
}; 

我的理解是我可以使用任何我想要的鍵/值。但我注意到有一些預定義的鍵可通過ClaimsType class獲得。所以,我可能會使用一些預先定義的鍵而不是:

List<Claim> claims = new List<Claim> 
{ 
    new Claim(ClaimTypes.Sid, user.ID), 
    new Claim(ClaimTypes.Name, user.Name), 
    new Claim(ClaimTypes.Role, "basic") 
}; 

問題:

  1. 如果我使用預先定義的按鍵,還有關於實際值的任何規則/限制分配給每個鍵,還是應用程序定義?例如,將數據庫主鍵保存在ClaimTypes.Sid中,還是ASP.NET對於ClaimTypes.Sid應該包含哪些內容有一定的期望?

  2. 是否有任何ClaimTypes要求,還是完全取決於應用程序來決定包含或不包含?我想,答案可能取決於我將與之交互的特定第三方身份驗證服務,但如何處理不包含任何第三方身份驗證的自包含ASP.NET項目的簡單情況。 ASP.NET本身是否有任何要求?

任何有關使用特定鍵/值的要求和/或最佳實踐的鏈接將不勝感激。

回答

5

如果我使用預先定義的按鍵,還有關於分配給每個鍵的實際值的規則/限制 ,或者是應用 界定?例如,將數據庫主鍵粘貼到ClaimTypes.Sid​​中,還是ASP.NET對ClaimTypes.Sid​​應包含的內容有某些期望?

如果您的結果爲Claim,則使用其中一個預定義的ClaimTypes也將修改Type屬性。 You can find a list of these types here。據我所知,你可以自由地將數據庫ID放入ClaimTypes.Sid,但是我強烈建議使用你自己的名稱來調用它。

是否有任何要求的索賠類型,或者是否完全達到 應用程序決定包含或不包含哪些內容?我想 答案可能取決於具體的第三方認證服務 我會與之交互,但如何處理一個簡單的 自包含ASP.NET項目,不使用任何第三方 認證。 ASP.NET本身是否有任何要求?

假設沒有第三方,您可以決定什麼是和不是必需的。請記住,如果您將聲明存儲在Cookie(不是第三方來源)中,則您的空間有限; cookies cannot be larger than 4096 bytes in total

迄今爲止發現的有關ASP.NET Core聲明身份驗證的最佳文章是herehere。截至本文發佈,我們仍在RC1中,因此在最終發佈之前可能會更改一些細節。

1
  1. 如果我使用預先定義的按鍵,還有關於分配給每個鍵的實際值的規則/限制,或者是應用程序定義的?例如,在ClaimTypes.Sid​​中粘貼數據庫主鍵是否可行,或者ASP.NET是否對ClaimTypes.Sid​​應包含哪些內容有某些期望?

基本上沒有規則resstrictions,但它取決於消費者的標記。默認情況下,Asp.Net Identity預期用戶名爲ClaimTypes.Name(無論您使用的是用戶顯示名稱還是郵件),角色爲ClaimTypes.Role和用戶ID(不需要行ID,只需識別用戶即可,例如Guid或電子郵件地址)爲ClaimTypes.NameIdentifier。默認值也可以看到here on GitHub

這就是說,如果您使用自定義聲明類型,則需要在配置Asp.Net Identity時在ClaimsIdentityOptions中告知它。

UserNameClaimType中設置的索賠類型是您使用的索賠類型,當您在您的控制器中使用User.Identity.Name進行訪問時。如果您的聲明類型與ClaimsIdentityOptions中的聲明類型不匹配,則它只會簡單地返回空值。

+0

感謝有關身份的信息。我目前沒有使用身份,但這可能會改變。我現在正在使用EF6和MVC Core 1(因爲EF7太不完整),並且Identity似乎與EF7交織在一起,並且需要[跳過某些環節](http://stackoverflow.com/a/33962018/333127)與EF6一起工作,所以我暫時擱置。 – cbranch