Получить ClaimsPrincipal / Identity из защищенного ядра PowerShell в AzureAD Azure Функция - PullRequest
1 голос
/ 09 июля 2020

У меня есть функция Azure, разработанная с использованием Powershell Core 6 и защищенная включением Azure AD аутентификации. Если анонимный запрос выполняется путем выполнения GET через браузер, пользователь сначала перенаправляется на вход Azure AD, а затем перенаправляется на мою функцию Azure. Authentication Configuration

Now, in the Powershell function, I need to know which has user logged in which is usually found in the ClaimsPrincipal as indicated here: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=csharp

Но httpRequest.Context.User имеет значение null, когда я обращаюсь к нему через powershell. Ниже приведен код моей функции:

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

$body = @{
    Context = $Request.Context;
    HttpContext = $Request.HTTP.Context;
    Request = $Request;
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})

Он в основном возвращает все в попытке найти User's Identity

Где я могу найти идентификатор пользователя?

Я не хочу использовать эти заголовки, потому что ими можно легко манипулировать, чтобы API продолжал работать.

$Request.Headers['X-MS-CLIENT-PRINCIPAL-NAME']
$Request.Headers['X-MS-CLIENT-PRINCIPAL-ID']

1 Ответ

1 голос
/ 09 июля 2020

Данные, которые вы ищете, должны находиться в $ Request.Headers, например:

$Request.Headers['X-MS-CLIENT-PRINCIPAL-NAME']
$Request.Headers['X-MS-CLIENT-PRINCIPAL-ID']

Структура объекта $Request в функциях PowerShell отличается от C# функций. В частности, у него нет ни свойства Context, ни HTTP, поэтому вы получаете значения NULL. Чтобы увидеть весь контент, начертите что-нибудь вроде:

$Request | ConvertTo-Json
...