我有两个Web应用程序,一个是使用AngularJS + BreezeJS的SPA,另一个是WebAPI。我们正在WebAPI中构建授权,并根据用户访问权限对结果进行过滤。我们希望用户在SPA中登录组织Azure AD,并将相同的身份验证传递给WebAPI。
我正在使用ADAL JS库在SPA中进行身份验证,并已成功处理。但是,我无法使用BreezeJS将相同的身份验证传递给WebAPI。我们的WebAPI是OData v3,没有authn,Breeze工作正常。我们已经定制了defaultHttpClient来为DataVersion和MaxDataVersion添加客户头,因为DataJS需要它。
var oldClient = OData.defaultHttpClient;
var myClient = {
request: function (request, success, error) {
request.headers.DataServiceVersion = '3.0';
request.headers.MaxDataServiceVersion = '4.0';
return oldClient.request(request, success, error);
}
};
OData.defaultHttpClient = myClient;
但是,我不知道如何传递身份验证令牌。
我在entityManager
中完成了以下操作
var ajaxAdapter = breeze.config.getAdapterInstance("ajax");
ajaxAdapter.defaultSettings = {
xhrFields: {
withCredentials: true
}
};
根据Ward Bell对John Papa的一篇文章的评论。但是,这似乎不起作用。需要帮助。
由于 与Hemant
答案 0 :(得分:0)
在对HTTP请求进行一些修补之后,我发现我们期望传递给服务器的Bearer令牌实际上并没有发生。原因是我们没有在微风中使用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;