AngularJs -.net MVC WebApi身份验证示例

时间:2013-07-15 01:02:26

标签: authentication angularjs asp.net-web-api

我有一个.Net MVC WebApi应用程序并尝试在Angularjs中专门编写前端。我能够通过json获取数据并对其进行操作,但我现在需要保护数据并将Base64身份验证添加到服务器的标头中。当我浏览一些我的.net视图测试页面时,我得到了相应的登录框,询问用户/通行证,这样我就可以继续获取json了。

我不知道该怎么做是在我的$资源中设置角度的标题中传递此信息(用户/通行证)。有没有完整的例子可以更好地告诉我如何做到这一点?我知道它涉及cookie并使用服务器传回的令牌,但我不知道如何将各个部分放在一起。

当我把所有这些结合在一起时,我希望通过所有层(DAL,RESTFUL,控制台测试层)发布一个完整的骨架示例。

所以问题是 - 在使用AngularJS $资源时如何将身份验证信息插入客户端的标头中?

由于

1 个答案:

答案 0 :(得分:3)

如果你在服务器端的标题中放入一个cookie,AngularJS将一直发送这个cookie。你无事可做。

如果你想在Header中传递令牌而不是在Angular端的cxookie中传递令牌,请在配置块中执行以下操作:$httpProvider.defaults.headers.common['X-Auth'] = yourKey;

然后,如果您想知道用户是否已登录,或者他是否拥有权限,则只需实现拦截器。这是一个简单的工厂,你可以在你的配置块中推送响应者。

这个工厂将监听来自服务器的每个响应,并且在他的实现中你将检查错误情况下响应的状态代码:

401 - >没有记录 403 - >不授权

工厂的例子:

myModule.factory('myHttpInterceptor', function ($q) {
    return function (promise) {
        return promise.then(function (response) {
            // do something on success              
            return response;
        }, function (response) {
            // do something on error
            //check status 401 or 403
            return $q.reject(response);
        });
    };
});

然后将你的工厂放在你的控制块中的http responseIntercetors中:

myModule.config(function ($httpProvider) {
    $httpProvider.responseInterceptors.push('myHttpInterceptor');
});

请记住,此解决方案在AngularJS 1.1.4中已弃用(仍然不稳定)......

工厂必须有所不同,只需参阅此帖子了解更多信息:AngularJS Intercept all $http JSON responses

希望有所帮助