Использование токена носителя Azure Bot для отправки запроса GET к внешнему API

У меня есть установка Azure Bot, которая аутентифицирует пользователя с помощью oAuth2. Отсюда я получаю токен доступа. У меня также есть веб-приложение, использующее проверку подлинности oAuth2 и тот же активный каталог, что и Azure Bot. С этим токеном доступа, выступающим в качестве токена-носителя, я хотел бы сделать запросы POST и GET к моему веб-приложению из Azure Bot.

Я пробовал следующее, но похоже, что мои запросы не проходят аутентификацию, так как я не получаю желаемого результата.

 RestClient client = new RestClient(BaseURL);
                    RestRequest request = new RestRequest("api/dashboard/GetUserName", Method.GET);
                    request.AddParameter("Authorization",
                    string.Format("Bearer " + tokenResponse.Token),
                                ParameterType.HttpHeader);
                    var response = client.Execute(request);

Могу ли я неправильно понять назначение или функцию токенов на предъявителя?


comment
Привет, vfirma, могу я узнать, какое ответное сообщение вы получили на запрос? 401 или 403? Или любое другое сообщение об ошибке?   -  person Hury Shen    schedule 07.01.2020
comment
Спасибо за ответ. Вот что мне вернули: ‹! - Copyright (C) Microsoft Corporation. Все права защищены. - ›‹! DOCTYPE html ›‹ html dir = ltr class = lang = en ›‹head› ‹title› Войдите в свою учетную запись ‹/title›‹ meta http-Equiv = Content-Type content = text / html; charset = UTF-8 ›....... По сути, он просит меня пройти аутентификацию, несмотря на включение токена-носителя в мой заголовок. Возвращенный код - 200   -  person vfirma    schedule 07.01.2020
comment
Вы имеете в виду запрос от Azure Bot к ответу веб-приложения 200? или вы получите ответ токена доступа 200?   -  person Hury Shen    schedule 07.01.2020
comment
Я получаю токен доступа без проблем. Однако запрос GET, который я опубликовал в первом вопросе, возвращает ‹! DOCTYPE html› ‹html dir = ltr class = lang = en› ‹head› ‹title› Войдите в свою учетную запись ‹/title› ‹meta http-Equiv = Content-Type content = text / html; charset = UTF-8 ›....... при использовании токена доступа в качестве токена-носителя. Я не уверен, что с моим вызовом что-то не так или Azure Bot просто не может вызвать api моего веб-приложения, несмотря на авторизацию. Тот факт, что мне предлагается войти в систему, несмотря на токен на предъявителя, говорит мне, что мой запрос GET, вероятно, неверен   -  person vfirma    schedule 07.01.2020


Ответы (1)


Насколько я понимаю, вы просто получаете токен доступа от Azure Bot, но хотите запросить от Azure Bot другое веб-приложение. Поэтому вам нужно получить еще один токен доступа из веб-приложения и использовать этот токен доступа в качестве токена-носителя.

В противном случае вам не нужно запрашивать другой токен доступа. Вы можете обновить токен, обратившись к этому руководство, но вам нужно изменить свойство" scope ", изменить его из области действия Azure Bot на область из веб-приложения.

Обновление:

Для ваших требований вам необходимо использовать OAuth 2.0 от имени потока, обратитесь к этому руководство. введите здесь описание изображения

На изображении потока выше «Веб-API A» представляет вашего Azure Bot, а «Веб-API B» - ваше веб-приложение. Вам необходимо получить первый токен доступа для веб-API A, а затем получить второй токен для веб-API B. После этого вы можете запросить веб-API B.

person Hury Shen    schedule 07.01.2020
comment
Мой бот Azure предлагает пользователю войти в систему с помощью oAuth2. Это дает мне токен доступа. Могу ли я использовать один и тот же токен доступа для доступа к содержимому моего веб-приложения, несмотря на то, что они используют один и тот же активный каталог? - person vfirma; 07.01.2020
comment
@vfirma Да, вы не можете использовать тот же токен доступа для запроса веб-приложения. Но судя по вашему описанию, возможно я неправильно понял ваши требования, позже отредактирую свой ответ. - person Hury Shen; 07.01.2020
comment
Согласно этой документации, это: docs.microsoft.com/en-us/azure/bot-service/. Хотя я мог ошибаться. По сути, я хочу использовать этот токен доступа в качестве токена-носителя при выполнении запросов GET и POST. Хотя я не уверен, почему код во вводном вопросе не работает - person vfirma; 07.01.2020
comment
Привет, @vfirma, я обновил свой ответ. Если вы хотите отправить запрос из своего Azure Bot в веб-приложение, см. Ответ в разделе «Обновление». Если вы просто хотите запросить веб-приложение из своего приложения после запроса Azure Bot, обратитесь к предыдущему решению. - person Hury Shen; 07.01.2020
comment
Вы знаете, какой токен возвращает Azure Bot? Сначала я думал, что это токен доступа, но это может быть код авторизации. Я попытался обменять это на токен доступа в своем веб-приложении, но не повезло - person vfirma; 07.01.2020
comment
Привет, @vfirma, согласно другому сообщению, которое вы Создано, похоже, вам нужно использовать первое решение, которое я предоставил выше. Вы можете получить токен доступа с помощью refresh_token, решение, предоставленное Алленом в этом посте, является правильным ответом на ваш вопрос. - person Hury Shen; 08.01.2020