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

问题描述 投票:1回答:1

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

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

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

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

Azure AD App Registration Settings

我在“公开API” bladd中配置了我的应用enter image description here

我在身份验证/授权刀片中的我的Azure Functions应用程序中关联了我的应用程序。

Azure Functions Authorization Settings

我正在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"
            };

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

            var myToken = authResult.AccessToken;

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

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

知道我在做什么错吗?

azure authentication azure-functions
1个回答
0
投票

范围不正确。当您要访问受广告保护的功能时,需要使用

var listScopes = new List<string>
            {
                "{applicationID}/.default"
            };

代替。

[user.read是Microsoft Graph API的权限。

© www.soinside.com 2019 - 2024. All rights reserved.