Тихая аутентификация для собственного сайта на вкладке пользовательского приложения Teams - PullRequest
5 голосов
/ 15 января 2020

После двух месяцев экспериментов с Аутентификацией команд через adal. js и msal. js и неудачей я близок к тому, чтобы сдаться. Поэтому мне очень нужна ваша помощь.

По сути, мне нужно «беззвучно» аутентифицировать вошедшего в систему пользователя Команды для моего собственного веб-сайта (вкладки) внутри моего приложения, созданного с помощью App Studio. Это связано с тем, что я могу использовать данные токена аутентификации для входа на свой собственный веб-сайт.

До сих пор мне удавалось работать только с msal. js и всплывающим окном, которое, по словам разработчика Teams, которое я спросил, не подходит для go. Понятно, так как я не могу использовать метод всплывающих окон в клиенте команд, потому что он блокируется.

Я пробовал этот метод входа в систему без вывода сообщений (https://github.com/OfficeDev/microsoft-teams-sample-complete-node/blob/master/src/views/tab-auth/silent.hbs), который был рекомендован мне. К сожалению, это не сработало. Все, что я получаю, это ошибка «Продление сбоя: операция обновления токена не выполнена из-за тайм-аута».

Поскольку всплывающий вариант msal. js (Node.js Azure Пример быстрого запуска), который я использовал до того, как работал в веб-браузере, я не думаю, что конфигурация Azure App неверна ,

Это мой код:

// onLoad="prepareForm()"

<!--- Import package for authentication information in Teams/Azure---> 
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.15/js/adal.min.js" integrity="sha384-lIk8T3uMxKqXQVVfFbiw0K/Nq+kt1P3NtGt/pNexiDby2rKU6xnDY8p16gIwKqgI" crossorigin="anonymous"></script> 
<script src="https://statics.teams.microsoft.com/sdk/v1.4.2/js/MicrosoftTeams.min.js" crossorigin="anonymous"></script>

<script language="JavaScript">

let config = {
    clientId: "1402f497-d6e8-6740-9412-e12def41c451", // I've changed it for this stackoverflow post
    redirectUri: "https://myredirect.com", // I've changed it for this stackoverflow post
    cacheLocation: "localStorage",
    navigateToLoginRequestUrl: false, 
};

microsoftTeams.initialize()

/// START Functions for Teams

function getTeamsContext() {
    microsoftTeams.getContext(function(context) {
        startAuthentication(context);
    });         
}

function startAuthentication(teamsContext) {
    if (teamsContext.loginHint) {
        config.extraQueryParameters = "scope=openid+profile&login_hint=" + encodeURIComponent(teamsContext.loginHint);
    } else {
        config.extraQueryParameters = "scope=openid+profile";
    }

    let authContext = new AuthenticationContext(config);

    user = authContext.getCachedUser();
    if (user) {
        if (user.profile.oid !== teamsContext.userObjectId) {
        authContext.clearCache();
        }
    }

    let token = authContext.getCachedToken(config.clientId);

    if (token) {
        console.log(token)
        // Get content of token
    } else {
        // No token, or token is expired
        authContext._renewIdToken(function (err, idToken) {
            if (err) {
                console.log("Renewal failed: " + err);
                // Some way of logging in via Popup or similiar
            } else {
                console.log(idToken)
                // Get content of token
            }
        });
    }         
}

/// END Functions for Teams

// initialized on page load! 
function prepareForm() {
    getTeamsContext();
    document.InputForm.password.focus() 
}

<script/>

Это мои вопросы:

  1. Что вызывает эту ошибку?
  2. Как мне аутентифицировать токен на манипуляциях и это команды или Azure? (Есть ли у adal. js какие-либо функции для этого?)
  3. Как мне войти в систему, если тихая аутентификация не удалась и всплывающие окна заблокированы? Существует ли веб-сайт для проверки подлинности, предоставленный командами, который возвращает токен?
  4. Существуют ли какие-либо рабочие примеры автоматической проверки подлинности, которые отсутствуют на официальном веб-сайте Microsoft? (Я их не понимаю.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...