我的目标是使用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 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"
};
var authResult = await PublicClientApp.AcquireTokenInteractive(listScopes)
.ExecuteAsync();
var myToken = authResult.AccessToken;
我可以毫无问题地进行身份验证,并且可以成功获取令牌,但是每当我调用函数并在Authorization标头(Authorization = Bearer ****)中提供令牌时,我就会得到:
401-您无权查看此目录或页面。
知道我在做什么错吗?
范围不正确。当您要访问受广告保护的功能时,需要使用
var listScopes = new List<string>
{
"{applicationID}/.default"
};
代替。
[user.read
是Microsoft Graph API的权限。