gpt4 book ai didi

azure - 从 Azure WebJob 安全地调用网站托管的 Web API

转载 作者:行者123 更新时间:2023-12-04 15:57:52 25 4
gpt4 key购买 nike

我有一个连续调度的 Web 作业,用于监视消息队列、提取消息并调用对等网站上的 Web API 来处理消息(在本例中使用 SignalR 向适当的用户发送通知)。

在这种情况下,安全调用 Web API 的最佳方法是什么?否则,网站中托管的 API 显然会暴露。也许使用基本身份验证或在配置中存储安全 token 并将其从作业传递到 Web API。或者创建自定义 AuthorizeAttribute?

Ant 对于保护来自 WebJob 的 Web API 调用的想法将非常感激。该 API 只能从 WebJob 调用。

更新:也许是这样的?

首先我声明这个类;

public class TokenAuthenticationHeaderValue : AuthenticationHeaderValue
{
public TokenAuthenticationHeaderValue(string token)
: base("Token", Convert.ToBase64String(Encoding.UTF8.GetBytes(token)))
{ }
}

然后调用者(WebJob)在发出 HTTP 请求时使用此类来设置身份验证 header ;

using (var client = new HttpClient())
{
client.BaseAddress = new Uri(/* something */);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new TokenAuthenticationHeaderValue("TOKEN FROM CONFIG");
// ....

在 Web API 中,我们检查请求,在 auth header 中查找预期的 token ,目前代码非常丑陋,但可以将其放入自定义属性中;

public HttpResponseMessage Post([FromBody]TheThing message)
{
var authenticationHeader = Request.Headers.Authorization;
var token = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationHeader.Parameter));
if (authenticationHeader.Scheme != "Token" || token != "TOKEN FROM CONFIG")
{
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "No, no, no. That's naughty!");
}
// All OK, carry on.

通过这种方式,WebJob 可以调用对等网站上的 Web API,并通过传递安全保存在 Azure 配置中的 token 来实现安全性,站点和作业都可以访问此 token 。

还有更好的想法吗?

最佳答案

听起来基本身份验证适合您的场景。

很棒的教程:Basic Authentication

关于azure - 从 Azure WebJob 安全地调用网站托管的 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23492611/

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