相关疑难解决方法(0)

授权角色WebAPI oauth owin

我在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.我必须启用某些功能吗?

c# authorization oauth asp.net-mvc-4 owin

22
推荐指数
1
解决办法
2万
查看次数

ASP.NET身份检查用户角色不起作用

我有一个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身份这么多?

请指教,

c# asp.net asp.net-mvc asp.net-identity

21
推荐指数
2
解决办法
2万
查看次数