azure - 使用 Azure AD 保护的 Azure Functions - 从本机应用程序调用时获取 HTTP 401
问题描述
我的目标是使用 Azure AD 保护我的 Azure Functions 并从 WPF 应用程序调用它们。
我有一个具有以下定义的 Azure 函数:
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
HttpRequest req,
ILogger log,
ExecutionContext context,
ClaimsPrincipal claimsPrincipal)
我注册了一个 Azure AD App 并配置了 Native App Authentication 的设置:
我还添加了一个 API 权限
我在身份验证/授权刀片的 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;
我可以毫无问题地进行身份验证,并且我成功获得了令牌,但是每当我调用我的函数并在授权标头(授权 = Bearer ****)中提供我的令牌时,我都会得到:
401 - 您无权查看此目录或页面。
这就是我所说的(邮递员):
这是调用返回时的 WWW-Authenticate 标头内容
当我检查我得到的令牌时,它似乎是合法的
知道我做错了什么吗?
解决方案
范围不正确。当您要访问受广告保护的功能时,您需要使用
var listScopes = new List<string>
{
"{applicationID}/.default"
};
反而。
user.read
是 Microsoft Graph API 的权限。
推荐阅读
- javascript - Alexa Skill Kit - AudioPlayer 元数据图像
- database - 将群发短信的记录保存到 db laravel
- function - 将函数从 V1 转换为 V4 pinescript
- python - 终止shell脚本的子进程Popen问题
- wordpress - 无法使用类将_meta_box 添加到我的 woocommerce 产品页面
- javascript - p5.js 的光标跟踪算法
- c# - 如何通过错误视图传递更详细的消息?
- google-chrome - 在 windows 中共享桌面音频时,chrome 如何进行回声消除
- iis - IIS。如何在不停止 Web 服务器的情况下替换 IIS 站点的内容
- woocommerce - 当我希望我的访客直接结账时,如何防止同一产品多次添加到购物车