Odata 使用BreezeJS将身份验证从WebApp传递到WebAPI

Odata 使用BreezeJS将身份验证从WebApp传递到WebAPI,odata,breeze,asp.net-web-api2,single-page-application,azure-active-directory,Odata,Breeze,Asp.net Web Api2,Single Page Application,Azure Active Directory,我有两个web应用程序,一个是使用AngularJS+BreezeJS的SPA,另一个是WebAPI。我们正在WebAPI中构建授权,结果将根据用户访问权限进行过滤。我们希望用户在SPA中登录到组织Azure AD,并将相同的身份验证传递给WebAPI 我在SPA中使用ADAL JS库进行身份验证,并且已经成功地处理了这个问题。但是,我无法使用BreezeJS将相同的身份验证传递给WebAPI。我们的WebAPI是odatav3,没有authn,Breeze工作得很好。我们已经定制了defaul

我有两个web应用程序,一个是使用AngularJS+BreezeJS的SPA,另一个是WebAPI。我们正在WebAPI中构建授权,结果将根据用户访问权限进行过滤。我们希望用户在SPA中登录到组织Azure AD,并将相同的身份验证传递给WebAPI

我在SPA中使用ADAL JS库进行身份验证,并且已经成功地处理了这个问题。但是,我无法使用BreezeJS将相同的身份验证传递给WebAPI。我们的WebAPI是odatav3,没有authn,Breeze工作得很好。我们已经定制了defaultHttpClient,以便为DataVersion和MaxDataVersion添加客户头,因为DataJS需要它

var oldClient=OData.defaultHttpClient;
var myClient={
请求:函数(请求、成功、错误){
request.headers.DataServiceVersion='3.0';
request.headers.MaxDataServiceVersion='4.0';
返回oldClient.request(请求、成功、错误);
}
};

OData.defaultHttpClient=myClient在对HTTP请求进行一些修补之后,我发现我们期望传递给服务器的承载令牌实际上没有发生。原因是我们没有在breeze中使用ajaxAdapter。我们必须自己添加标题并发送请求。我们在Azure AD中设置了一个应用程序。我们必须为客户端应用程序获取密钥,才能从存储中获取令牌。这个前缀加上“Bearer”就成功了。以下是自定义适配器的示例代码:

        var oldClient = OData.defaultHttpClient;

        var myClient = {
            request: function (request, success, error) {
                request.headers.DataServiceVersion = '3.0';
                request.headers.MaxDataServiceVersion = '3.0';
                request.headers.Authorization = "Bearer " + adalAuthenticationService.getCachedToken('<<your AD client app key here>>');
                return oldClient.request(request, success, error);
            }
        };
        OData.defaultHttpClient = myClient;
var oldClient=OData.defaultHttpClient;
var myClient={
请求:函数(请求、成功、错误){
request.headers.DataServiceVersion='3.0';
request.headers.MaxDataServiceVersion='3.0';
request.headers.Authorization=“Bearer”+adalAuthenticationService.getCachedToken(“”);
返回oldClient.request(请求、成功、错误);
}
};
OData.defaultHttpClient=myClient;