我需要从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;'然后它工作 –