使用 Azure AD 保护的 Azure Functions - 从本机应用程序调用时获取 HTTP 401

ale*_*xbf 5 authentication azure azure-functions

我的目标是使用 Azure AD 保护我的 Azure Functions 并从 WPF 应用程序调用它们。

我有一个具有以下定义的 Azure 函数:

public IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
        HttpRequest req,
        ILogger log,
        ExecutionContext context,
        ClaimsPrincipal claimsPrincipal)
Run Code Online (Sandbox Code Playgroud)

我注册了一个 Azure AD 应用程序并配置了本机应用程序身份验证的设置:

Azure AD 应用程序注册设置

我在“公开 API”blad 中配置了我的应用程序 公开 API

我还添加了一个API权限

API权限

我将我的应用程序关联到身份验证/授权边栏选项卡中的 Azure Functions 应用程序中。

Azure Functions 授权设置

我在 WPF 应用程序中从 Azure AD 获取令牌(使用 Microsoft.Identity.Client 库)

            string applicationID = "***"; // My AppID Guid
            PublicClientApp = PublicClientApplicationBuilder.Create(applicationID)
                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                .Build();

            var listScopes = new List<string>
            {
                //"user.read" - Removed based on @tony-yu recommendation
                $"api://{applicationID}/MyScope"
            };

            var authResult = await PublicClientApp.AcquireTokenInteractive(listScopes)
                                      .ExecuteAsync();

            var myToken = authResult.AccessToken;
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地进行身份验证,并且成功获取令牌,但每当我调用函数并在授权标头中提供令牌(Authorization = Bearer ****)时,我都会得到:

401 - 您无权查看此目录或页面。

我这样称呼它(邮递员):

在此输入图像描述

这是调用返回时的 WWW-Authenticate 标头内容

www-身份验证

当我检查我得到的令牌时,它似乎是合法的

代币

知道我做错了什么吗?

ale*_*xbf 0

所以我终于成功了,感谢ambrose-leung的这篇文章