我已经创建了一个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
});
}
答案 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
是正确的