[英]Call Azure API from WebJob/ Shared code between WebJob and web api
[英]Securely calling a WebSite hosted Web API from an Azure WebJob
我有一個連續調度的Web作業,它正在監視消息隊列,關閉消息並在對等Web站點上調用Web API來處理消息(在這種情況下使用SignalR向適當的用戶發送通知)。
在這種情況下,安全地調用Web API的最佳方法是什么? 否則,在網站中托管的API顯然是公開的。 也許使用Basic Auth或在配置中存儲安全令牌並將其從作業傳遞到Web API。 或者創建自定義AuthorizeAttribute?
關於從WebJob保護Web API調用的Ant想法將非常感激。 API只能從WebJob中調用。
更新:也許這樣的事情?
首先我宣布這個班級;
public class TokenAuthenticationHeaderValue : AuthenticationHeaderValue
{
public TokenAuthenticationHeaderValue(string token)
: base("Token", Convert.ToBase64String(Encoding.UTF8.GetBytes(token)))
{ }
}
然后調用者(WebJob)在發出HTTP請求時使用此類設置auth頭;
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頭中查找預期的令牌,目前代碼非常難看,但這可以放入自定義屬性中;
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配置中的令牌來實現安全性,站點和作業都可以訪問此令牌。
有更好的想法嗎?
聽起來像基本身份驗證對你的場景來說很好。
這里很棒的教程: 基本認證
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.