关于oauth:使用BreezeJS OData数据服务传递授权承载令牌

Passing authorization bearer token using BreezeJS OData data service

在使用OData数据服务时,如何告诉Breeze包括授权承载令牌标头?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Configured breeze to use OData
breeze.config.initializeAdapterInstance('dataService', 'OData');

//Configured breeze to use AngularJS ajax
var instance = breeze.config.initializeAdapterInstance('ajax', 'angular', true);

//Tried passing authorization bearer token header using setHttp with no success
//NOTE: $http setup with $http.defaults.headers.common['Authorization'] = 'Bearer...'
instance.setHttp($http);

//Tried passing authorization bearer token header using ajax settings with no success
instance.defaultSettings = {
    headers: {
        'Authorization': 'Bearer...'
    },
};

//Fiddler shows no authorization bearer token header for following query
var manager = new breeze.EntityManager('/odata/');
var query = breeze.EntityQuery.from('Customers');
return manager.executeQuery(query).to$q(querySucceeded, queryFailed);


我不知道您是否解决了您的问题。这对我有用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function configureBreeze() {
            // configure to use the model library for Angular
            breeze.config.initializeAdapterInstance("modelLibrary","backingStore", true);

            var accessToken = Security.user.access_token;

            if (Security.user.access_token) {
                // get the current default Breeze AJAX adapter & add header required for the         Web API bearer token mechanism
                var ajaxAdapter = breeze.config.getAdapterInstance("ajax");
                ajaxAdapter.defaultSettings = {
                    headers: {

                        'Authorization': 'Bearer ' + accessToken
                    },
                };
            }
        }

它是对configureBreeze方法的修改,该方法在asp.net MVC4的Angular / Breeze SPA模板的datacontext.js脚本中找到。

希望有帮助。


1
2
3
4
5
6
7
//instance.defaultSettings = {
//    headers: {
//        'Authorization': 'Bearer...'
//    },
//};

instance.headers['Authorization'] = 'Bearer...';

Breeze网站上有一个示例(在OData AJAX下):http://www.getbreezenow.com/documentation/controlling-ajax

1
2
3
4
5
6
7
8
9
10
var oldClient = OData.defaultHttpClient;

var myClient = {
     request: function (request, success, error) {
         request.headers.Authorization = authorization;
         return oldClient.request(request, success, error);
     }
};

OData.defaultHttpClient = myClient;

我有同样的问题。在查看了oData的轻量级dataservice之后,我认为它只是忽略了ajax提供程序,因为它正在使用datajs进行请求。因此instance.setHttp($http);将不起作用。我最终像这样覆盖了datajs中的默认request方法:

1
2
3
4
5
    var base = window.OData.request;
    window.OData.request = function (request, success, error, handler, httpClient, metadata) {
        angular.extend(request.headers, { Authorization: $rootScope.token });
        return base(request, success, error, handler, httpClient, metadata);
    };