【问题标题】:Authenticate and Authorise in Both MVC and Http AuthorizeAttribute在 MVC 和 Http AuthorizeAttribute 中进行身份验证和授权
【发布时间】:2017-12-08 16:09:45
【问题描述】:

我得到以下正在运行的场景:

MVC 控制器使用System.Web.Mvc.AuthorizeAttribute 来验证用户是否经过身份验证,它将使用cookie。

API 控制器使用System.Web.Http.AuthorizeAttribute 使用不记名令牌进行授权。

我也有 angular http 拦截器,用于验证和获取用于 API 的不记名令牌,可以在所有 angular $http 请求中使用。但是我很困惑如何在用户登录后实现这两者?

这是当前的工作流程

  1. 用户点击登录,角度验证并在本地存储中存储熊令牌。
  2. 完成后,手动触发 MVC 控制器,以便获取 cookie 进行 MVC 身份验证。

在我看来这真的是双重工作,还是我应该专注于使用一个AuthorizeAttribute

【问题讨论】:

    标签: angularjs asp.net-mvc asp.net-mvc-4 authentication cookies


    【解决方案1】:

    您需要使用 Authorize 键来授予需要授权的功能的权限。而且这些功能只有在生成授权令牌并通过http请求传递时才能访问。

    module.service('tokenservice', function ($http) {
    this.get = function () {
        var accesstoken = sessionStorage.getItem('accessToken');
        var logged_in = localStorage.getItem('logged_in').toString().trim() === 'false' ? false : true;
        var authHeaders = {};
        if (accesstoken && logged_in) {
            authHeaders.Authorization = 'Bearer ' + accesstoken;
        }
    
        return authHeaders;
    };
    });
    
    module.controller('yourControllerName', function ( $http, tokenservice) {
        $http({
            method: "POST",
            url: '/Controller/MyFucntion',
            headers: tokenservice.get(),
        });
    });
    

    这将帮助您在用户登录时获取生成的令牌。之后你需要使用你的控制器

    [Authorize]
    public JsonResult MyFucntion()
    {
        //Your logic and calculation
        //return
    }
    

    希望对你有所帮助

    【讨论】:

    • 我已经有了这个,我的问题是当浏览页面时,或者任何请求都与 MVC 控制器一起使用时,我仍然使用 System.Web.Mvc.AuthorizeAttribute 属性,这让我在登录时需要双重工作,因为 MVC 使用 cookie而Http使用不记名令牌,所以我需要一直保留cookie和令牌
    • 是的,你必须同时保留它们
    • 但这会导致登录过程更长,因为我需要先获取令牌,然后重定向到 MVC 控制器才能获取 cookie 和主页。
    • 这将花费更多时间,但根据我的经验,这没什么大不了的,因为我们的团队目前正在开展一个我们已经使用它的项目。它完全没问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多