在 Azure Function 中接收 Blazor wasm 发送的身份验证令牌

     2023-02-19     82

关键词:

【中文标题】在 Azure Function 中接收 Blazor wasm 发送的身份验证令牌【英文标题】:Receive authentication token in Azure Function sent by Blazor wasm 【发布时间】:2020-10-15 02:56:17 【问题描述】:

我正在使用 Azure Functions 作为 API 开发 Blazor wasm。 我已经可以在客户端应用程序上通过 Azure AD B2C 对用户进行身份验证,但是在 Azure Function 中识别用户时,所有请求的 ClaimsPrincipal.Current 都会收到 null,即使用户是 在 blazor 应用中登录。

public static class Function1

    [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.User, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    
        log.LogInformation("C# HTTP trigger function processed a request.");

        if (ClaimsPrincipal.Current == null || !ClaimsPrincipal.Current.Identity.IsAuthenticated)
        
            log.LogInformation("Claims: Not authenticated");
        
        else
        
            log.LogInformation("Claims: Authenticated as " + ClaimsPrincipal.Current.Identity.Name);
        

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        string responseMessage = string.IsNullOrEmpty(name)
            ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
            : $"Hello, name. This HTTP triggered function executed successfully.";

        return new OkObjectResult(responseMessage);
    

我错过了什么?应用程序是否会在每次请求时自动发送令牌? 关于身份验证,我只在 program.cs 中添加了这个。

builder.Services.AddMsalAuthentication(options =>
        
            builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
        );

如何确定应用程序正在发送令牌? ClaimsPrincipal 是接收令牌和用户身份的正确方法吗?

【问题讨论】:

【参考方案1】:

BaseAddressAuthorizationMessageHandler 处理程序附加到HttpClient 时,令牌由Authorization 标头中的http 请求发送。 要使用此处理程序创建 HttpClient,您可以在 HttpClientFactory 中注册一个客户端,如下所示:

services
    .AddHttpClient("azure-function")
    .ConfigureHttpClient(httpClient =>
    
        var azureUri = new Uri("path to azure");
        httpClient.BaseAddress = azureUri;
    )
    .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

并通过注入 http 客户端工厂在您的组件或服务中使用此客户端:

@using System.Net.Http
@inject IHttpClientFactory _factory

@code 
    protected override async Task OnInitializedAsync()
    
        var httpClient = _factory.CreateClient("azure-function");
        var result = await httpClient.GetAsyn<Result>("endpoint path");
    

【讨论】:

感谢您的回答。由于我的 blazor 是独立的 (wasm),因此我将按照此处的说明进行操作:docs.microsoft.com/en-us/aspnet/core/blazor/security/…您知道如何使用 AddMsalAuthentication 执行此操作吗? @CageE 也这样做。它与帐户类型无关。 绑定builder.Services.AddHttpClient("AuthorizedClient", client => client.BaseAddress = new Uri(builder.Configuration[ApiBaseAddress])) .AddHttpMessageHandler(); Fiddler 中的 Auth 标头仍然为空。 @CageE 提出问题

如何使用 Azure Function 在 Azure 文件共享中解压缩文件?

】如何使用AzureFunction在Azure文件共享中解压缩文件?【英文标题】:HowtounzipfileinAzureFileShareusingAzureFunction?【发布时间】:2021-02-0703:51:10【问题描述】:我有一个带有Azure文件共享的Azure存储帐户。我想使用Azure函数将zip存档文件... 查看详情

如何确定 Webhook 未触发 Azure Function App 的原因

】如何确定Webhook未触发AzureFunctionApp的原因【英文标题】:HowtodeterminewhyanAzureFunctionAppisnottriggeredbyawebhook【发布时间】:2019-05-2702:12:03【问题描述】:我有:HTTPwebhook配置中的JavaScriptAzure函数;该函数提供一个URL;函数执行一个动... 查看详情

在 Azure Function 中覆盖 function.json 的问题

】在AzureFunction中覆盖function.json的问题【英文标题】:Problemwithoverwritingfunction.jsoninAzureFunction【发布时间】:2021-08-3004:30:21【问题描述】:我想问你关于我当前问题的解决方案。首先,我想强调的是,即使在***上可以找到非常相... 查看详情

Azure(函数)参数在 Python 中声明,但不在 function.json 中

】Azure(函数)参数在Python中声明,但不在function.json中【英文标题】:Azure(functions)ParametersaredeclaredinPythonbutnotinfunction.json【发布时间】:2021-04-0408:47:04【问题描述】:我无法理解发生了什么。我从字面上遵循所有Microsoft文档,实... 查看详情

如何在本地环境中自动启动 Azure Function?

】如何在本地环境中自动启动AzureFunction?【英文标题】:HowdoIautomaticallylaunchAzureFunctioninalocalenvironment?【发布时间】:2022-01-2009:22:24【问题描述】:我有两个Azure函数链接在一起。我想使用RestAssured在本地测试它们。但要做到这一... 查看详情

如何在 Azure Function 代码中使用访问密钥(由 Azure Vault 管理)连接存储

】如何在AzureFunction代码中使用访问密钥(由AzureVault管理)连接存储【英文标题】:HowtoconnectStoragewithAccessKeys(managedbyAzureVault)inAzureFunctioncode【发布时间】:2021-08-1113:09:03【问题描述】:在Azure中创建了一个存储帐户。然后还创建... 查看详情

在 Azure Function 中使用 xUnit 的 Moq 服务总线

】在AzureFunction中使用xUnit的Moq服务总线【英文标题】:MoqServiceBususingxUnitinAzureFunction【发布时间】:2021-12-2201:56:55【问题描述】:我有实现HTTP触发器和服务总线的Azure函数。我已经成功完成了HttpResponse的xUnits实现,但不确定如何... 查看详情

如何在 Azure Pipelines YAML 构建定义中接收修订

】如何在AzurePipelinesYAML构建定义中接收修订【英文标题】:HowtoreceiveRevisioninAzurePipelinesYAMLbuilddefinition【发布时间】:2019-07-1113:53:59【问题描述】:我使用AzurePipelines(AzureDevOps)创建了一个新版本,它运行良好。通常,您使用$(Rev:.r... 查看详情

Azure Function v3 - 在启动中添加标识时“无法访问 Azure Functions 运行时”

】AzureFunctionv3-在启动中添加标识时“无法访问AzureFunctions运行时”【英文标题】:AzureFunctionv3-"AzureFunctionsruntimeisunreachable"whenaddIdentityinStartup【发布时间】:2021-09-0301:18:58【问题描述】:我有一个AzureFunction(v3),它必须与... 查看详情

如何在 Azure Function v2(核心)中静态使用 ConfigurationBuilder?

】如何在AzureFunctionv2(核心)中静态使用ConfigurationBuilder?【英文标题】:HowtouseConfigurationBuilderstaticlyinanAzureFunctionv2(core)?【发布时间】:2019-06-1120:01:07【问题描述】:在将Azure函数从v1移植到v2时,配置管理器用于读取local.settings... 查看详情

如何在 Azure Function 中使用 Azure Managed Identity 通过触发器访问 Service Bus?

】如何在AzureFunction中使用AzureManagedIdentity通过触发器访问ServiceBus?【英文标题】:HowtouseAzureManagedIdentityinAzureFunctiontoaccessServiceBuswithatrigger?【发布时间】:2019-01-2617:10:36【问题描述】:我在Azure中创建了一个ServiceBus命名空间,以... 查看详情

在 Visual Studio 中开发 Azure Function 时存储帐户无效

】在VisualStudio中开发AzureFunction时存储帐户无效【英文标题】:InvalidstorageaccountwhendevelopingAzureFunctioninVisualStudio【发布时间】:2018-03-0207:30:51【问题描述】:我正在使用C#在VisualStudio中开发AzureFunction。我在代理后面的开发机器上本... 查看详情

如何在启动类中使用 Azure Function 中的中间件

】如何在启动类中使用AzureFunction中的中间件【英文标题】:HowtouseMiddleWareinAzureFunctioninstartupclass【发布时间】:2021-10-0603:22:49【问题描述】:我正在寻找使用中间件来解密在startup.cs类中传入azure函数的http请求。下面是我的入门... 查看详情

无法在 Azure Function Python3 中添加 ML 模型

】无法在AzureFunctionPython3中添加ML模型【英文标题】:UnabletoaddMLModelinAzureFunctionPython3【发布时间】:2021-01-0908:41:58【问题描述】:我正在尝试创建一个azure函数,该函数将从我的ML模型(final_model.sav)中返回数据。通过这样做,ML模... 查看详情

如何在 Python MagicMock 中模拟 Azure ServiceBus 接收器

】如何在PythonMagicMock中模拟AzureServiceBus接收器【英文标题】:HowtomockAzureServiceBusReceiverinPythonMagicMock【发布时间】:2022-01-0706:51:58【问题描述】:我正在使用PythonAzureServiceBuspackage并拥有以下sn-p代码:#receiver.pyimportlogginglogger=logging... 查看详情

在事件中心接收消息时未触发 ASE 中的 Azure 函数

】在事件中心接收消息时未触发ASE中的Azure函数【英文标题】:AzureFunctioninASEnottriggredwhenreceivingamessageinaneventhub【发布时间】:2022-01-0103:26:01【问题描述】:我们正在尝试在独立应用服务计划中的应用服务环境中部署Azure函数。每... 查看详情

无法在 Azure Function App Startup 中 DI 自定义对象

】无法在AzureFunctionAppStartup中DI自定义对象【英文标题】:UnabletoDIcustomobjectinAzureFunctionAppStartup【发布时间】:2021-10-0304:36:03【问题描述】:local.settings.json"IsEncrypted":false,"Values":"AzureWebJobsStorage":"UseDevelopmentStorage=true", 查看详情

运行时错误:SWIG std::function 调用失败,在 azure databricks 中

】运行时错误:SWIGstd::function调用失败,在azuredatabricks中【英文标题】:Runtimeerror:SWIGstd::functioninvocationfailed,inazuredatabricks【发布时间】:2019-07-0509:22:16【问题描述】:在使用googleor-tools的路由求解器时,会抛出运行时错误。在收... 查看详情