从 AzureAD 安全的 powershell 核心 Azure 函数中获取 ClaimsPrincipal/Identity

Get ClaimsPrincipal/Identity from AzureAD secured powershell core Azure Function

我有一个使用 Powershell Core 6 开发的 Azure Function,并通过启用 Azure AD 身份验证来保护。如果通过浏览器执行 GET 发出匿名请求,则用户将首先重定向到 Azure AD 登录,然后再重定向到我的 Azure Functions。

现在,在 Powershell 函数中,我需要知道哪个用户已登录,通常可以在 ClaimsPrincipal 中找到,如下所示: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=csharp

但是当我通过 powershell 访问它时 httpRequest.Context.User 是空的。下面是我函数中的代码:

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
})

基本上returns一切都是为了找到User's Identity

在哪里可以找到用户的身份?

我不想使用这些 headers,因为它们很容易被操纵,仍然可以使 API 正常工作。

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

您要查找的数据应该在$Request.Headers下,例如:

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

PowerShell 函数中的 $Request 对象结构与 C# 函数不同。具体来说,它既没有 Context 也没有 HTTP 属性,这就是你得到空值的原因。要查看全部内容,请跟踪以下内容:

$Request | ConvertTo-Json