【发布时间】:2016-07-06 00:40:05
【问题描述】:
我需要从 Asp.Net 用户授权系统获取 UserId,因为我的大部分数据都存储在 SQL 中,并且使用 UserId 作为用户拥有该数据的标记。使用 Owin OAuth 2.0 我无法使用身份获取 UserId,它返回 null。所以我想出了这个解决方案:
令牌提供者
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)中
-
每个控制器都有
User属性,所以修改你的第一行代码:ClaimsPrincipal principal = User as ClaimPrincipal;然后它就可以工作了
标签: c# asp.net .net asp.net-mvc owin