具有ASP.NET Web Api身份验证和角色的ASP.NET MVC

时间:2018-07-11 15:45:34

标签: c# asp.net asp.net-mvc asp.net-web-api

我已经创建了一个ASP.NET MVC应用程序,已经成功安装了WebAPI,现在我使用ajax请求来获取api的数据。
某些数据仅在用户验证后才可用,并且只有在具有特定角色时才可用。有没有办法做到这一点?

C#WebApi代码:

public class TestController : ApiController
{
    [HttpGet]
    [Authorize(Roles = RoleTypes.Admin +","+ RoleTypes.Enabled)]
    public string Query()
    {
    string test = "test";
    return test;
    }

}

我的JavaScript代码:

  // Here i should get the tokenKey but where should i set it? is this approach right?
var token = sessionStorage.getItem(tokenKey);
var headers = {};
    if (token) {
        $.ajaxSetup({
            headers: {
                'Authorization': "Bearer " + token
            }
        });
    }


    $.get("/api/Test/Query", function (data) {
    //stuffs here
      });
}

2 个答案:

答案 0 :(得分:0)

我在您的代码中看到您使用了JWT令牌。 JWT令牌如下所示:

XXX.ZZZ.YYY

当用户不登录时,您可以在启动项目中获得角色和权限并在令牌中进行设置。

或创建一个捕获方法,以获取角色和权限,并使用在其中设置数据的静态属性。

现在,这里的问题是如何授权操作用户。

我建议您使用动作过滤器use of this link to understanding action filter,并检查其权限并调用其他管道。

祝你好运。

答案 1 :(得分:0)

根据this,当用户登录时,您应该生成一个令牌。该令牌将存储在客户端并在请求中使用。

$.ajax({
    type: 'POST',
    url: '/Login',
    data: loginData
}).done(function (data) {
    self.user(data.userName);
    // Cache the access token in session storage.
    sessionStorage.setItem(tokenKey, data.access_token);
}).fail(showError);

接下来,当用户将请求发送到服务器时,您将令牌头传递给令牌。

var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
    headers.Authorization = 'Bearer ' + token;
}

$.ajax({
    type: 'GET',
    url: 'api/values/1',
    headers: headers
}).done(function (data) {
    //stuffs here
}).fail(showError);

this之后,令牌在服务器中解密,以将授权声明(角色)获得授权。您的ApiController是正确的