ASP.NET:通过AJAX调用使用Bearer Token授权MVC Action

时间:2018-06-06 14:35:25

标签: javascript c# jquery asp.net-mvc asp.net-web-api2

这是我在SO的第一篇文章。

我有一个ASP.NET项目,它在后端使用Web API,使用承载令牌身份验证,使用PostMan完美运行。虽然,我在前端挣扎(SPA只使用jQuery)。

我想要的是能够使用附加的承载令牌调用MVC操作并成功通过身份用户进行身份验证,以便我可以获得下一个好处:

使用[授权]属性调用MVC操作。我想在服务器中处理身份验证和授权,而不是使用JavaScript。它还将处理角色授权。

-Call MVC Action将实例化Api Controller并调用Api Action,从Api Actions响应创建ViewModel并生成局部视图。这将避免jQuery将数据插入DOM,因为MVC操作将返回带有数据的部分视图。

- 使用从MVC Action传递的模型,使用Razor部分视图。它还允许我在部分视图上使用条件,因此如果具有管理员角色的用户请求它,我可以显示额外的内容。

我已经读过MVC应该使用Cookie身份验证进行身份验证,我将如何实现这一目标?我的登录表单在提交时直接通过AJAX请求承载令牌。提前谢谢。

GitHub,源代码:https://github.com/RolandoMalena/jogtrackr/tree/master/jogtrackr/Web/JogTrackr

从给定端点获取HTML的JavaScript函数:

function getHTML(endPoint, callback) {
$.ajax({
    //headers: { Authorization: 'Bearer ' + sessionStorage.getItem('accessToken') },
    datatype: "text/html",
    type: "GET",
    url: endPoint,
    cache: true,
    success: function (result) {
        callback(result);
    }
});

调用上述函数的示例:

getHTML('/Entries/GetWeeklyReport', function (result) {
                content.find("#loading").before(result);
            });

示例MVC控制器,请注意我GetUserId()返回null:

public PartialViewResult GetWeeklyReport()
    {
        //this returns null
        var temp = User.Identity.GetUserId();
        return PartialView("_WeeklyReport");
    }

0 个答案:

没有答案