从 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
我有一个使用 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