我需要從Asp.Net用戶授權系統獲取UserId,因爲我的大部分數據都存儲在SQL中,並使用UserId作爲用戶擁有此數據的標記。使用Owin OAuth 2.0我無法使用Identity獲取UserId,它返回null
。所以我想出了這個解決方案:您是否可以在Owin OAUTH 2令牌中存儲UserId?
令牌提供商
identity.AddClaim(new Claim("user_id", user.Id));
API
ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal;
var userName = principal.Claims.Where(c => c.Type == "user_id").Single().Value;
簡單的API代碼
var userName = ClaimsPrincipal.Current.Claims.First(c => c.Type == "user_id").Value;
這種方法是否適合企業業務級應用程序,它是安全的,安全的和強大的?或者你會(也許)建議其他的東西?
我只是不喜歡在這個功能是(可能)由Microsoft.AspNet.Identity(.NET本身)提供的時候在標記內部傳遞UserId的想法,但由於我無法使它工作,這是我現在唯一的選擇。
無論如何,我部分使用this great tutorial repository的代碼。正如你所看到的,這個控制器已經註釋了使用Identity獲得UserId的行。但是這對我不起作用,所以我正在使用另一條使用聲明的註釋行。
你在哪裏把這個代碼兩行,在控制器或過濾器? –
在控制器(ApiController) – EwanCoder
每個控制器都會有'用戶'屬性,所以改變你的第一行代碼:'ClaimsPrincipal principal = User作爲ClaimPrincipal;'然後它工作 –