带有Web API控制器身份验证问题的Blazor服务器

人气:944 发布:2022-10-16 标签: authentication asp.net-core-webapi blazor

问题描述

我有一个Blazor服务器应用程序,我想要添加一个Web API控制器,可以从Postman访问,最终也可以从其他应用程序访问。Blazor应用程序需要身份验证,但不需要Web API。我尝试添加AllowAnonymous,但收到从邮递员调用它的身份验证错误:

HTTPS错误401.2-未经授权 由于身份验证标头无效,您无权查看此页面。

我怀疑我们的安全代理正在添加标头:

是否可以在经过身份验证的Blazor服务器应用程序中托管不安全的(AllowAnonymous)Web API?

也许我只需要以某种方式定制我的API调用?

控制器:

[Route("api/[controller]")]
[ApiController]
[AllowAnonymous]
public class ProfileController : ControllerBase
{
    [HttpGet("{year}", Name = "GetProfileResults")]
    public async Task<IActionResult> GetProfileResults(int year)
    {
        var profileResults = repo.GetResults(year);
        return Ok(profileResults);
    }
}

推荐答案

您必须添加另一个未附加令牌的HTTP客户端。

Program.cs

builder.Services.AddHttpClient(
    name: "Anon.ServerAPI",
    client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress));

RazorPage.razor.cs

[Inject]
public IHttpClientFactory HttpClientFactory { get; set; }

protected override async Task OnInitializedAsync()
{
    http = HttpClientFactory.CreateClient("Anon.ServerAPI");
    videos = await http.GetFromJsonAsync<VideoDto[]>("api/YoutubeVideos");
}

349