Использование OAuthCard для вызова функции Azure - PullRequest
0 голосов
/ 31 августа 2018

У меня бот V3, и из диалогового окна я хочу вызвать функцию Azure, которая заблокирована Azure AD V1. Я хочу получить токен из Azure AD и использовать этот токен для доступа к функции Azure.

Я пытаюсь использовать OAuthCard с провайдером Azure AD и задаю URL ресурса для своей функции Azure https://my -function-app.azurewebsites.net

Когда я вхожу в OAuthCard, я получаю сообщение об ошибке "Приложение с именем https://my -function-app.azurewebsites.net не найдено в клиенте с именем 880fb54d-f717-4364-9a22- df9ac5c77f6d "

Приложение Function действительно живет в этом арендаторе. Ниже приведены параметры подключения OAuth, настроенные при регистрации канала Bot.

Можно ли использовать OAuthCard для вызова функции Azure, заблокированной Azure AD?

OAuth Connection String

1 Ответ

0 голосов
/ 03 сентября 2018

У меня бот V3, и из диалогового окна я хочу вызвать функцию Azure, которая заблокирована Azure AD V1. Я хочу получить токен из Azure AD и использовать этот токен для доступа к функции Azure.

Если возможно, вы можете напрямую сделать запрос на получение токена доступа для https://my-function-app.azurewebsites.net из вашего бот-приложения, как показано ниже:

//Acquire token

var client = new RestClient($"https://login.microsoftonline.com/{tenantId}/oauth2/token");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", $"grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}&resource={resource}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

var tokenResponse = JsonConvert.DeserializeObject<TokenResponse>(response.Content);

var access_token = tokenResponse.access_token;

Класс TokenResponse:

public class TokenResponse
{
    public string token_type { get; set; }
    public string expires_in { get; set; }
    public string ext_expires_in { get; set; }
    public string expires_on { get; set; }
    public string not_before { get; set; }
    public string resource { get; set; }
    public string access_token { get; set; }
}

и затем вы можете позвонить / получить доступ к конечной точке приложения функции с помощью этого токена доступа.

//Call Azure function using access token

var client2 = new RestClient($"https://xxxxfunction.azurewebsites.net/api/HttpTriggerFunc?code=CR9X9VsIattzWybmvasvpjAXfQU2feRuV3jXC6p/0B2AlFgl4LwPMw==");
var request2 = new RestRequest(Method.POST);
request2.AddHeader("Authorization", $"Bearer {access_token}");
request2.AddHeader("Content-Type", "application/json");

request2.RequestFormat = DataFormat.Json;
request2.AddBody(new { name = "Fei Han" });

IRestResponse response2 = client2.Execute(request2);

var funcResponse = JsonConvert.DeserializeObject<string>(response2.Content);

await context.PostAsync($"Response returned from Azure function: {funcResponse}.");

Результат теста:

enter image description here

Примечание:

Для получения подробной информации, пожалуйста, проверьте «Служба для обслуживания вызовов с использованием учетных данных клиента» .

...