Azure托管ASP.NET Core Razor Pages应用获取访问令牌为null的问题求助
Azure托管ASP.NET Core Razor Pages应用获取访问令牌为null的问题求助
大家好,我遇到了一个卡了很久的问题,想请教下各位大佬:
我有一个托管在Azure上的ASP.NET Core Razor Pages Web应用,用Azure AD应用注册做身份认证,目前登录、身份验证以及生成Bearer令牌这些流程都能正常跑通。我现在要调用Azure APIM里一个带有策略的API,手动复制登录时生成的令牌到Postman里调用是完全没问题的,但在Web应用里尝试把这个令牌作为变量设置到POST请求的授权头时,却始终拿不到有效令牌——加断点查看相关代码时,令牌的值一直是null。
我已经翻了不少官方文档和社区资料,尝试了两种常见的令牌获取实现方式,但结果都是一样的:
第一种是通过注入ITokenAcquisition服务来获取令牌:
using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Configuration; using Microsoft.Identity.Web; public class IndexModel : PageModel { private readonly ITokenAcquisition _tokenAcquisition; private readonly string _apiUrl; public IndexModel(ITokenAcquisition tokenAcquisition, IConfiguration configuration) { _tokenAcquisition = tokenAcquisition; _apiUrl = configuration["ApiUrl"]; // 替换为我的API端点URL } public async Task OnGetAsync() { string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { "your_api_scope" }); using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); try { HttpResponseMessage response = await httpClient.GetAsync(_apiUrl); if (response.IsSuccessStatusCode) { string apiResponse = await response.Content.ReadAsStringAsync(); // 按需处理API响应 } else { // 处理请求失败的情况 } } catch (HttpRequestException ex) { // 处理异常 } } } }
第二种是结合AuthorizeForScopes特性和IAuthorizationHeaderProvider来获取:
[AuthorizeForScopes(Scopes = new[] { "user.read" })] public async Task<IActionResult> Profile() { // 获取访问令牌 string[] scopes = new string[]{"user.read"}; string authorizationHeader = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes); // 使用令牌调用受保护的Web API HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", authorizationHeader); string json = await client.GetStringAsync(url); }
不管用哪种方式,获取到的令牌都是null,明明登录的时候已经成功生成了令牌,实在搞不懂问题出在哪,有没有大佬能帮忙分析下可能的原因?
备注:内容来源于stack exchange,提问作者squidy
相关产品推荐
相关产品推荐

