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

Azure功能受Azure AD保护-从本机应用程序调用时获取HTTP 401,azure,authentication,azure-functions,Azure,Authentication,Azure Functions,我的目标是用Azure AD保护我的Azure函数,并从WPF应用程序调用它们 我有一个具有以下定义的Azure函数: public IActionResult Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ILogger log, ExecutionContext context, Cla

我的目标是用Azure AD保护我的Azure函数,并从WPF应用程序调用它们

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

public IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
        HttpRequest req,
        ILogger log,
        ExecutionContext context,
        ClaimsPrincipal claimsPrincipal)
我注册了Azure AD应用程序,并为本机应用程序身份验证配置了设置:

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

我还添加了一个API权限

我在身份验证/授权刀片服务器中的Azure功能应用程序中关联了我的应用程序

我在WPF应用程序(使用Microsoft.Identity.Client库)中从Azure广告中获得这样一个令牌

string applicationID=“***”;//我的AppID Guid
PublicClientApp=PublicClientApplicationBuilder.Create(applicationID)
.WithRedirectUri(“https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();
var listScopes=新列表
{
//“user.read”-根据@tony yu推荐删除
$“api://{applicationID}/MyScope”
};
var authResult=await PublicClientApp.AcquireTokenInteractive(listScopes)
.ExecuteAsync();
var myToken=authResult.AccessToken;
我可以毫无问题地进行身份验证,并且我成功地获得了一个令牌,但每当我调用我的函数并在授权头中提供我的令牌时(Authorization=Bearer****),我会得到:

401-您没有查看此目录或页面的权限。

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

以下是调用返回时的WWW Authenticate标头内容

当我检查我得到的代币时,它似乎是合法的


知道我做错了什么吗?

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

var listScopes = new List<string>
            {
                "{applicationID}/.default"
            };
var listScopes=新列表
{
“{applicationID}/.default”
};
相反


user.read
是Microsoft Graph API的权限。

因此,我终于让它工作了,这多亏了这里的它不工作了,在更改scopes@alexbf你是如何调用这个函数的?这个函数url在浏览器中可以使用吗?我从Postman调用我的函数(我在帖子中添加了一些细节)。该函数在浏览器中不起作用,因为它被配置为从NativeApp调用
var listScopes = new List<string>
            {
                "{applicationID}/.default"
            };