2014-01-17 7 views
0

MyAuthorizationFilterAttribute當我的認證處理成功通過(用戶ID從解密的令牌採取)我想要的地方添加用戶id當前請求的對象。通行證溫度數據在網絡API

在當用戶認證授權管道後來被執行,在這裏我再次需要用戶id,因爲我不允許身份驗證的用戶從操作具有一定的userId其他用戶的數據。

什麼將是temporarely保存用戶id的最好方法?我應該誤用request.headers來添加userId嗎?

+0

你可以使用'HttpRequestMessage'上的'Properties'集合。 –

+0

謝謝,應該工作。從來沒有見過收集之前;-) – Elisabeth

回答

1

CMON達雷爾...請不要重新發明輪子;)

驗證處理結果應該是一個ClaimsPrincipal(把它放在HttpAuthenticationContext.Principal)。

這種方式,您提供給授權過濾器的用戶ID - 以及ApiController.User。

+0

你好多米尼克,知道你是安全大師;-)我問你的意見一個簡單的問題。如果我按照@ Darrel的建議,我的userId也可以在我的自定義AuthorizationFilter以及UserController通過Request.Properties等得到......所以你的ClaimsPrincipal的用法真的有什麼優勢? – Elisabeth

+0

這是一個DelegatingHandler的我的AuthenticationHandler沒有HttpAuthenticationContext屬性。我只能在http過濾器中找到HttpAuthenticationContext類,但是這在管道中已經太晚了。好吧,我發現它:在handler.SendAsync內我可以這樣做:request.GetRequestContext();有屬性的對象。但它只有一個名稱(字符串)屬性。我有一個userId(int)...一個名字根本不是唯一的。這令人困惑... – Elisabeth

+0

這是一個簡單的體系結構 - 某人(例如處理程序)設置主體 - 請求的其餘部分通過標準機制「獲取」它。例如它被傳遞到authZ過濾器 - 它可以通過ApiController.User,Request.RequestContext等獲得。只需創建一個包含聲明(例如ClaimTypes.NameIdentifier)的聲明主體並在RequestContext上設置聲明主體。屬性集合當然也適用。我只是在說... – leastprivilege

0

HttpRequestMesssage.Properties。它是一個專爲存儲請求範圍數據而設計的字典。