You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 08:47:59