我在ASP.NET Web API上使用OWIN中间件实现了一个令牌授权系统.我成功地可以使用REST客户端进行身份验证并获取授权令牌来调用API.如果我将[Authorize]属性放在我的控制器中的GET操作上,它也可以正常工作.如果我没有有效的令牌,它会拒绝带有401消息的资源,但如果我使用[Authorize(Roles="admins")]该roles参数,它将无法识别用户的角色.我验证了数据库中的内容并检查了它usersinroles是否正确填充.
这是一段代码:
[Authorize(Roles = "admins")]
public IEnumerable<CompanyModel> Get()
{
ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal;
bool isrole = principal.IsInRole("admins");
Run Code Online (Sandbox Code Playgroud)
我还检查了没有roles参数的动作,并且isrole总是布尔值false.我必须启用某些功能吗?
我有一个ASP.NET MVC 5应用程序.我正在使用标准的ASP.NET身份提供程序进行用户和角色管理.重要的是我从自己的存储库项目中使用IdentityUser,但这似乎没问题.我可以注册,登录,编辑用户和管理他们的角色.
我使用以下行将用户添加到Role:
UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这似乎在DB级别工作.
但是,我不能使用基于角色的身份验证,实际上就是简单
HttpContext.User.IsInRole("Administrator")
Run Code Online (Sandbox Code Playgroud)
不起作用.
[Authorize(Roles="Administrator")]
Run Code Online (Sandbox Code Playgroud)
不起作用.
我只能用这种方法检查用户是否是管理员:
UserManager.IsInRole(userID, "Administrator").
Run Code Online (Sandbox Code Playgroud)
为什么?
在我发现的每个教程中,一切正常.可能是不同的项目存储库?或者ASP.NET身份这么多?
请指教,