Office 插件未对 Webapi 进行身份验证
Office Add in not Authenticating to Webapi
当前在访问具有授权属性并已注册到 Azure AD 的 Web api 控制器时遇到问题。目前我正在从 ADAL.JS 成功获取令牌,现在正尝试对测试 Webapi 进行 ajax 调用,这将为我的 Office-Addin 应用程序执行后端服务。我已经尝试过我将要描述的场景。
第一个场景:
我创建了单独的 Web 应用程序条目 Azure 管理门户,一个用于我的办公室添加应用程序,以便我可以获得令牌,另一个用于我的 Web api,以便我可以将其锁定。然后我允许我的 office-add 应用程序添加到我的 webapi,以便我的 office-Add in 与我的 web api 对话。我收到未经授权的 401 状态。
第二个塞纳里奥:
由于我未获得授权,我继续在我的 Azure 管理门户中创建一个新应用程序并使用 ADAL.js 获取令牌,但是当我对网络进行相同的调用时 api 这是与我的 office-Addin 应用程序共享相同的客户编号,我仍然获得 01 状态未授权。
不确定我做错了什么,似乎我已经尝试了两种可能的方法,但 none 对我有用。这是我的 java-脚本
window.config = {
tenant: variables.azureAD,
clientId: variables.clientId,
postLogoutRedirectUri: window.location.origin,
endpoints: {
sharePointUri: "https://" + tenant + ".sharepoint.com",
ContentCenterApi: "https://localhost:44334"
},
cacheLocation: "localStorage"
};
var authContext = new AuthenticationContext(config);
var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();
if (isCallback && !authContext.getLoginError()) {
window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
}
function GetSharepointList(e) {
var authContext = new AuthenticationContext(config);
var user = authContext.getCachedUser();
if (!user) {
authContext.login();
}
else {
authContext.acquireToken(config.endpoints.sharePointUri, function (error, token) {
if (error || !token) {
console.log("ADAL error occurred: " + error);
return;
}
else {
var me = this;
//var SiteUrl = config.endpoints.sharePointUri + "/sites/Apps_Dev/ER_TestSite/";
$.ajax({
url: 'https://localhost:44334/api/Values/Get',
dataType: "json",
headers: {
"Authorization": "Bearer " + token,
"accept": "application/json;odata=verbose",
},
success: function (data) {
handleData(data);
}
}).done(function (response) {
console.log("Successfully fetched list from SharePoint.");
// var items = response.d.results;
//$("#contentPreview").append(items[0]);
}).fail(function (error) {
console.log("Fetching list from SharePoint failed.");
});
}
});
};
}
我有点困惑你打电话的 API 是
“https://localhost:44334/api/Values/Get”,但获取token的资源id是"config.endpoints.sharePointUri"。应该是你在Azure AD上注册的App URI。
关于如何使用 Azure AD 保护 Web API。下面这篇文章或许能给你一些帮助。
Protect a Web API using Bearer tokens from Azure AD.
单页应用程序演示 (adal.js):active-directory-angularjs-singlepageapp
此示例演示如何使用 JavaScript 的 ADAL 来保护基于 AngularJS 的单页应用程序,使用 ASP.NET Web API 后端实现。
当前在访问具有授权属性并已注册到 Azure AD 的 Web api 控制器时遇到问题。目前我正在从 ADAL.JS 成功获取令牌,现在正尝试对测试 Webapi 进行 ajax 调用,这将为我的 Office-Addin 应用程序执行后端服务。我已经尝试过我将要描述的场景。
第一个场景: 我创建了单独的 Web 应用程序条目 Azure 管理门户,一个用于我的办公室添加应用程序,以便我可以获得令牌,另一个用于我的 Web api,以便我可以将其锁定。然后我允许我的 office-add 应用程序添加到我的 webapi,以便我的 office-Add in 与我的 web api 对话。我收到未经授权的 401 状态。
第二个塞纳里奥:
由于我未获得授权,我继续在我的 Azure 管理门户中创建一个新应用程序并使用 ADAL.js 获取令牌,但是当我对网络进行相同的调用时 api 这是与我的 office-Addin 应用程序共享相同的客户编号,我仍然获得 01 状态未授权。
不确定我做错了什么,似乎我已经尝试了两种可能的方法,但 none 对我有用。这是我的 java-脚本
window.config = {
tenant: variables.azureAD,
clientId: variables.clientId,
postLogoutRedirectUri: window.location.origin,
endpoints: {
sharePointUri: "https://" + tenant + ".sharepoint.com",
ContentCenterApi: "https://localhost:44334"
},
cacheLocation: "localStorage"
};
var authContext = new AuthenticationContext(config);
var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();
if (isCallback && !authContext.getLoginError()) {
window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
}
function GetSharepointList(e) {
var authContext = new AuthenticationContext(config);
var user = authContext.getCachedUser();
if (!user) {
authContext.login();
}
else {
authContext.acquireToken(config.endpoints.sharePointUri, function (error, token) {
if (error || !token) {
console.log("ADAL error occurred: " + error);
return;
}
else {
var me = this;
//var SiteUrl = config.endpoints.sharePointUri + "/sites/Apps_Dev/ER_TestSite/";
$.ajax({
url: 'https://localhost:44334/api/Values/Get',
dataType: "json",
headers: {
"Authorization": "Bearer " + token,
"accept": "application/json;odata=verbose",
},
success: function (data) {
handleData(data);
}
}).done(function (response) {
console.log("Successfully fetched list from SharePoint.");
// var items = response.d.results;
//$("#contentPreview").append(items[0]);
}).fail(function (error) {
console.log("Fetching list from SharePoint failed.");
});
}
});
};
}
我有点困惑你打电话的 API 是 “https://localhost:44334/api/Values/Get”,但获取token的资源id是"config.endpoints.sharePointUri"。应该是你在Azure AD上注册的App URI。
关于如何使用 Azure AD 保护 Web API。下面这篇文章或许能给你一些帮助。
Protect a Web API using Bearer tokens from Azure AD.
单页应用程序演示 (adal.js):active-directory-angularjs-singlepageapp
此示例演示如何使用 JavaScript 的 ADAL 来保护基于 AngularJS 的单页应用程序,使用 ASP.NET Web API 后端实现。