gpt4 book ai didi

c# - Azure Web PubSub 和服务器之间的身份验证

转载 作者:行者123 更新时间:2023-12-03 02:00:23 29 4
gpt4 key购买 nike

有一个简单的 ASP.NET 应用程序作为事件处理服务器:

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
builder.Services
.AddWebPubSub(options => options.ServiceEndpoint = new ServiceEndpoint(WebPubSubConnectionString))
.AddWebPubSubServiceClient<WebPubSubHub>();

WebApplication app = builder.Build();

app.MapWebPubSubHub<WebPubSubHub>("/eventhandler");
app.Run();

Azure Web PubSub 具有以下 Webhook URL 配置:

enter image description here

我需要以某种方式保护此端点 /eventhandler 因为它是公共(public)的,任何人都可以调用它。 Azure 建议的选项之一是使用简单的身份验证代码。 enter image description here

帮助我了解应该在 ASP.NET 应用程序中的何处验证该代码?

假设我在 WPS 中配置了 URL 模板,例如

https://a9e5-92-253-212-316.ngrok-free.app/eventhandler?code=RRRRR

然后在服务器代码中

app.MapWebPubSubHub<WebPubSubHub>("/eventhandler?code=RRRRR")

结果异常

Microsoft.AspNetCore.Routing.Patterns.RoutePatternException: 'Theliteral section 'eventhandler?code=RRRRR' is invalid. Literal sectionscannot contain the '?' character.'

最佳答案

一种可能的方法是使用AddEndpointFilter

app.MapWebPubSubHub<WebPubSubHub>("/eventhandler").AddEndpointFilter(new ApiKeyFilter(builder.Configuration));

实现可能如下所示:

public class ApiKeyFilter : IEndpointFilter
{
private readonly string _apiKey;

public ApiKeyFilter(IConfiguration configuration)
{
_apiKey = configuration.GetValue<string>("ApiKey");
}

public async ValueTask<object> InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next)
{
if (!context.HttpContext.Request.Query.TryGetValue("code", out var extractedApiKey))
{
return Results.Unauthorized();
}

if (!_apiKey.Equals(extractedApiKey))
{
return Results.Unauthorized();
}

return await next(context);
}
}

另一种选择是使用

app.MapWebPubSubHub<WebPubSubHub>`("/eventhandler").RequireAuthorization(builder => builder.AddRequirements(new ApiKeyRequirement))

其中 ApiKeyRequirement 是您的 IAuthorizationRequirement 实现

关于c# - Azure Web PubSub 和服务器之间的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76396002/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com