2016-06-14 54 views
1

我正在開發一個後端基於asp.net owin的應用程序。 在Startup.cs中我有IAppBuilder.useCookieAuthentication(){...}。成功通過身份驗證後,可以通過HttpContext在我的所有Web API控制器中訪問具有角色的當前用戶。OWIN cookie身份驗證在客戶端獲取角色

我的JavaScript客戶端需要了解這些角色以瞭解如何顯示特定項目。例如:具有管理員角色的用戶可以看到其他選項卡。

我的問題是:將這些角色「轉移」到客戶端的最佳方式是什麼?是通過編寫一些將返回這些角色的端點或其他方式?

感謝

+0

請首先描述您的實際目標和重寫你的問題,因爲它看起來像你正試圖做一些奇怪的事情,根據你的評論, – cassandrad

+0

謝謝!更新我的問題更清晰 –

回答

0

你並不需要通過有關在「原始」狀態的客戶端的角色或許可信息。相反,你應該有AuthenticationTicket - 保存所有信息並加密的東西。因此,如果您正在使用OWIN中間件的正確實施,則無需自己做一些事情 - 中間件會將所有必要數據添加到您的響應中(Cookie內),客戶端只需在下一次將此信息重新發送回服務器當他想訪問服務器上的一些資源時。

是的,我暗示你不應該有關於客戶端權限的任何信息 - 這是不安全的。

+0

在我的情況下,我需要根據用戶的角色在客戶端顯示特定的項目。所以我需要以某種方式將這些角色「轉移」到客戶端。現在的問題是如何將這些角色「轉移」到客戶端 –

+1

@JauniusEitmantis,您不需要客戶端的實際角色。如果它只是一個動畫問題,那麼你可以在客戶端發送任何東西來標記你想要顯示哪種動畫。如果是顯示某些特定信息(文本)的問題,則可以發送特定文本並在服務器端做出決定。如果是某種功能,那麼您需要在服務器端準備所有必要的腳本,數據和標記,然後根據特定角色將其發送到客戶端。一般來說,客戶端不應該操作這些條款,因爲角色 – cassandrad

+0

可以詳細說明一下嗎?爲什麼根據用戶的角色來隱藏/顯示html項目是不好的主意?如果maliciuos用戶試圖取消隱藏這些元素,他將無法訪問服務器,也不會看到任何內容,因爲服務器將返回未授權狀態。 –

1

我完全同意@cassandrad!

但是,如果你要訪問它作爲純文本,比你必須提供自己實現TicketDataFormatCookieAuthenticationOptions

public class CustomAccessTokenFormat : ISecureDataFormat<AuthenticationTicket> 
{ 
    // If you want to do custom serialization and encryption 
    public string Protect(AuthenticationTicket ticket) 
    { 
     return "UserName|Role1|Role2|..."; // your raw text serialization goes here 
    } 

    // Deserilaize and decrypt the ticket 
    public AuthenticationTicket Unprotect(string strTicket) 
    { 
     return new AuthenticationTicket(null, null); // deserialize the plain text here into an AuthenticationTicket object 
    } 
}