2015-01-23 30 views
7

Czy mogę użyć HttpClient .NET do uderzenia w usługę Azure Mobile?Usługi mobilne Azure, HttpClient, autoryzacja

W jaki sposób mogę uwierzytelnić się z usługą Mobile Service wypieczoną w custom Authentication/Authorization patterns za pomocą HttpClient?

to zawsze zwraca 401, bo ja nie przekazując żadnych poświadczeń uwierzytelniania:

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

Ponadto, jak to się stało, gdy używam Mobile Service Client, dlaczego moja aplikacja klucza, klucz główny lub klucz uwierzytelniający użytkownika zawsze wracasz (401) Nieautoryzowany?

Klient:

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

Serwis Side:

[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"; 
    } 
} 

Odpowiedz

12

"? Czy mogę używać .NET na HttpClient trafić usługi Azure Mobile" Krótka odpowiedź brzmi "tak". Prostym sposobem jest dodać to do nagłówków na kliencie:

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

Bądź jednak ostrożny, jeśli używasz wersji lokalnie hostowane będziemy chcieli, aby upewnić się, że masz ...

  1. Wymuszono usługę, aby była obsługiwana, aby umożliwić uwierzytelnianie.

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

  2. Dodano klawisz aplikacji i master key do pliku web.config:

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

Bez nr 1, uwierzytelnianie całej służbie zostanie całkowicie zignorowany i dlatego nie wiesz, czy działa poprawne dodawanie uwierzytelniania w kliencie. Bez numeru 2 możesz dodać klucz do klienta (który otrzymujesz z platformy Azure), ale chcesz zawsze zwróci 401. To może być odpowiedź na sekundę ond pytanie na temat korzystania z MobileServiceClient zawsze zwraca 401.

Wreszcie, istnieją trzy różne nagłówki, których można użyć w sumie. Używasz każdego z każdym poziomem autoryzacji. Z tego MSDN doc:

  • X-ZUMO zgłoszeniu klucz -The stosowanie służbie ruchomej. Musisz podać poprawny klucz aplikacji, gdy jest to wymagane, aby uzyskać dostęp do operacji na stole. Jest to domyślne uprawnienie dostępu do operacji na stole.
  • X-ZUMO-AUTH - Generowany przez usługę token uwierzytelniający dla uwierzytelnionego użytkownika. Musisz określić token dla uwierzytelnionego użytkownika, gdy jest on wymagany do uzyskania dostępu do operacji na stole.
  • X-ZUMO-MASTER - Główny klucz serwisowy. Należy włączyć ten klucz tylko wtedy, gdy dostęp administracyjny jest wymagany do uzyskania dostępu do operacji na stole.

Uwaga autora: Osobiście borykałem się z tym, aby to zadziałało, i mając ograniczoną lub brakującą dokumentację dla tego konkretnego stylu, chciałem napisać to pytanie. Daj mi znać, jeśli uważasz, że powinienem coś dodać.

+3

Niezwykle przydatny opis i bardzo brakujący w jakiejkolwiek dokumentacji, którą udało mi się wykopać. Dziękuję Ci! –

+0

Skąd wziąć te klucze? Ani azure portal, ani web.config nie zawierają żadnych kluczy. – Anthony

+0

@Anthony Minęło trochę czasu, odkąd to zepsułem, ale wierzę, że po prostu je sam ustawiłem; ale nie mogę być tego pewien. – Porschiey

Powiązane problemy