我最近問this question並已成功設置我的自定義授權屬性。針對操作和API調用的自定義授權?
但現在我已經打了另一堵牆關於API調用。我需要這些呼叫也以與動作呼叫相同的方式進行授權。我知道System.Web.Http和System.Web.Mvc Authorize屬性有區別。所以我創建了一個單獨的Api特定屬性,它基本上做了同樣的事情。但是,我在設置用戶主體和標識時遇到了問題,就像我在原始屬性中一樣。
我的屬性只是檢查cookie中的一些值來授權請求,一旦屬性讀取了cookie,我將存儲解密的cookie信息在自定義主體/標識設置中。在我的Api調用中,當我從標識中檢索這些信息時,我的轉換失敗並且收到一個空值。
這是我如何存儲的信息
阿比
HttpContext.Current.User = new MyPrinciple(new MyIdentity(decCookie.Name, decCookie.UserData));
行動
filterContext.RequestContext.HttpContext.User = new MyPrinciple(new MyIdentity(decCookie.Name, decCookie.UserData));
我如何找回我假定所需的信息是相同的
(User.principal.Identity as MyIdentity).MyData;
個問題
- 我真的需要有2個獨立的屬性
- 有關API的屬性我怎麼能輕易存儲控制器內以後使用的信息。或者基本上我可以不用這種方式實際獲取/設置身份這些電話?
編輯#1
我發現如何正確地從我ApiController訪問我的cookie的值,我只是缺少的System.Web> _ <參考。所以第二個問題已經解決了!但#1仍然存在。
我看你已經設置System.Threading.Thread.CurrentPrincipal ...這如何從HttpContext.Current.User有什麼不同? – Zholen 2013-03-01 18:53:39
我沒有看過它tbh,我發現api控制器的用戶對象與httpcontext.user不同,所以我將它推入到線程主體中,而它似乎工作正常。 – Slicksim 2013-03-03 17:21:14