簡體   English   中英

Azure 移動服務、HttpClient、授權

[英]Azure Mobile Services, HttpClient, Authorization

我可以使用 .NET 的 HttpClient 來訪問 Azure 移動服務嗎?

如何使用 HttpClient 在自定義身份驗證/授權模式中使用移動服務自己的身份驗證

這總是返回 401,因為我沒有傳入任何身份驗證憑據:

var client = new HttpClient();           
var response = client.GetAsync("http://localhost:49190/api/test").Result;

此外,為什么當我使用Mobile Service Client 時,為什么我的應用程序密鑰、主密鑰或用戶身份驗證密鑰總是返回 (401) Unauthorized?

客戶:

var mobileClient = new MobileServiceClient("http://localhost:49190/", "[my key]");
var response = mobileClient.InvokeApiAsync("test").Result;

服務端:

[AuthorizeLevel(AuthorizationLevel.Application)]
public class TestController : ApiController
{
    public ApiServices Services { get; set; }

    // GET api/Test
    public string Get()
    {
        Services.Log.Info("Hello from custom controller!");
        return "Hello";
    }
}

“我可以使用 .NET 的 HttpClient 訪問 Azure 移動服務嗎?” 簡短的回答是肯定的。 簡單的方法是將 this 添加到客戶端的標頭中:

        var client = new HttpClient();           
        client.DefaultRequestHeaders.Add("X-ZUMO-APPLICATION", "[my key]");

不過要小心,如果您使用的是本地托管版本,您需要確保您已經...

  1. 強制服務認為它是托管的,以便啟用身份驗證。

    (在 App_Start/WebApiConfig.cs: config.SetIsHosted(true);

  2. 將應用程序密鑰和主密鑰添加到 web.config:

     <appSettings> <add key="MS_MasterKey" value="[your master key]" /> <add key="MS_ApplicationKey" value="[your app key]" /> </appSettings>

如果沒有 #1,跨服務的身份驗證將被完全忽略,因此您不知道您在客戶端中添加的身份驗證是否正常工作。 如果沒有 #2,您可以隨心所欲地將密鑰添加到客戶端(從 Azure 獲得),但它總是會返回 401。這可能是關於使用MobileServiceClient總是返回 401 的第二個問題的答案。

最后,您總共可以使用三個不同的標題。 您可以根據不同的授權級別使用每一個。 從這個MSDN 文檔

  • X-ZUMO-APPLICATION - 移動服務的應用密鑰。 當需要訪問表操作時,您必須指定一個有效的應用程序密鑰。 這是默認的表操作訪問權限。
  • X-ZUMO-AUTH - 為經過身份驗證的用戶提供的服務生成的身份驗證令牌。 當需要訪問表操作時,您必須為經過身份驗證的用戶指定令牌。
  • X-ZUMO-MASTER - 服務主密鑰。 只有在需要管理員訪問權限才能訪問表操作時,才應包含此鍵。

作者注:我個人一直在努力使其工作,並且由於這種特定風格的文檔有限或缺失,我想寫這個 Q/A。 如果您認為我應該添加任何內容,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM