Azure Function ClaimsPrincipal 本地

Sau*_*nri 5 c# azure-functions

我正在使用经过 Azure AD 身份验证的 Azure 函数。部署在 Azure 上时一切正常。

    public static async Task<IActionResult> ExportT(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ClaimsPrincipal principal,
        ILogger log)
    {
        var c = principal.Claims.Select(x => x.Value);

        return new OkObjectResult(c);

    }
Run Code Online (Sandbox Code Playgroud)

返回 :

[ "38a1e83b-c1d3-4fd7-bdc6-ef2447", "https://sts.windows.net/635e38ef-108e-4a26-b718-bbd532/", "1564501257", "1564501257", "1564505157", "42FgYFCuNWnL3ROWG9x3p4EzN3+c/6u8Gh5jV7sT0A", "pwd", "test", "test", "92.169.93", "test", "36fbab-425b-9d65-b2425ef3d9bf", "a1c1ee35-67ab-4f3a-2877c5580b1e", "ES_SALARIED", "XboeusxsxyvnjhCT_vJHkzncPE2JBU58Q50", "635e38ef-26-b718-bbd960991532", "testdedev@ins.coop", "testdedev@ins.coop", "PJ0vEo70o0G__HrwX8ghAA", "1.0" ]
Run Code Online (Sandbox Code Playgroud)

但是当使用 VS2019 在本地执行时,我得到:

[ "Admin" ]
Run Code Online (Sandbox Code Playgroud)

任何想法 ?

问候,

Ste*_*ter 1

我能找到的最接近的方法是使用此存储库中的这些示例(在撰写本文时提交)。

在示例 AuthenticationService 中,我context.User = claimsPrincipal;在验证声明后添加了该服务。

从那里,我可以对我的 HTTP 触发器执行以下操作:

[Authorize]
[FunctionName("AuthTest")]
public async Task<IActionResult> AuthTest(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "test")] HttpRequest req)
{
    // Current user identity returned
    // (quickly thrown together as you get a circular reference error when converting to JSON):
    return new OkObjectResult(
       req.HttpContext.User.Identities.Select(x =>
          new {
                 Claims = x.Claims.Select(y => new
                    {
                        y.Type,
                        y.Value,
                        y.Issuer,
                        y.Properties
                    }),
                 x.Name,
                 x.Actor,
                 x.AuthenticationType,
                 x.NameClaimType
                })
            );
 }
Run Code Online (Sandbox Code Playgroud)

寒冷来袭?

如果您有访问令牌,则可以GET: http://localhost:7071/api/test在标头中使用 JWT 令牌。

例如:

在此输入图像描述

您还需要

注意事项

这没有使用“简单身份验证”。我选择这种方法是因为我想使用支持 AAD V2 的MSAL.NET 。我发现 AAD V2 尚不支持:

目前,Azure 应用服务和 Azure Functions 不支持 AAD V2(包括 MSAL)。请查看更新。 参考号

我经历了一场真正的斗争才走到这一步。如果您需要在应用程序投入生产之前测试应用程序,那么简单的身份验证似乎不是一个选择。即使在这个答案之后,我也不知道如何使授权像普通的 Web API 策略方法一样简单。