Вызов веб-API C# из надстройки Outlook Web
Я создал веб-API ASP.NET MVC, который размещен в Azure. У него есть ClientID, по которому клиенты должны проходить аутентификацию при вызове его методов действия.
Теперь я создал надстройку Outlook Web и добавил ее на ленту встреч. Пользователи входят на https://outlook.office.com/ и проходят проверку подлинности. После этого они смогут получить доступ к надстройке на ленте встреч. Когда пользователь щелкает значок надстройки, панель надстройки загружается в правой части окна.
В моей надстройке мне нужно заполнить некоторые раскрывающиеся списки и т. д., поэтому мне нужно загрузить данные из веб-API.
Итак, сначала мне нужно аутентифицировать пользователя. Я прочитал несколько статей, в которых предлагается использовать библиотеку msal.js. В моей надстройке эта часть пытается аутентифицировать пользователя:
Office.onReady(function (info) {
$(document).ready(function () {
// The document is ready
GetAccessToken();
});
});
function GetAccessToken() {
//************** acquireTokenSilent
console.log('configuring msal...');
var msalConfig = {
auth: {
clientId: <web pi client it>,
authority: <my authority>,
redirectUri: <configured redirect uri on azure for the web api app reg.>
},
cache: {
cacheLocation: "sessionStorage",
storeAuthStateInCookie: false
}
};
var msalInstance = new msal.PublicClientApplication(msalConfig);
console.log('msal configured');
msalInstance.acquireTokenPopup({
scopes: ["User.Read"]
})
.then(response => {
// Handle token acquisition
window.close(); // Close the popup window
// Acquire token interactive success
// Call API with token
console.log('token acquired');
accessToken = response.accessToken;
console.log('access token: ' + accessToken);
})
.catch(error => {
// Acquire token interactive failure
console.log('error acquiring token: ' + error);
});
}
При запуске кода всплывающее окно показывает и аутентифицирует пользователя. Но затем во всплывающем окне вместо закрытия отображается индексная страница веб-API, чтобы я мог получить токен доступа.
Я хочу, чтобы всплывающее окно закрылось, чтобы я мог получить токен доступа, а затем добавить его в заголовок для моих вызовов API.
Я попытался вручную закрыть всплывающее окно с помощью window.close(), но это не сработало.
Как сделать так, чтобы всплывающее окно автоматически закрывалось?
1 ответ
Добавьте этот код в свой файл Redirect.html.
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>
<script>
var address_Link = window.location.href;
console.log(address_Link)
var address_arr = address_Link.split("=");
var address_Token = address_arr[1];
var Id_Token = address_Token.split("&");
var access_token = Id_Token[0];
console.log(Id_Token)
Office.onReady(function (appInfo) {
Office.context.ui.messageParent(JSON.stringify(access_token));
</script>
Я добавляю URL-адрес вашего идентификатора клиента и ваш redirect_uri. при успешном входе вы получите токен доступа в свой js. Надеюсь, это будет полезно для вас. Я изо всех сил старался объяснить вам.