2013-02-28 17 views
6

Próbuję napisać aplikację mobilną, która pobierze dane z witryny opartej na odpoczynku internetowym.Bezpieczny interfejs WWW z JWT

Witryna powinna być zabezpieczona poprzez ACS (ponieważ może istnieć wielu dostawców tożsamości).

Moja aplikacja mobilna obecnie wyszukuje następujący adres URL: https://xx.accesscontrol.windows.net/v2/metadata/IdentityProviders.js?protocol=javascriptnotify&realm=http://xx.azurewebsites.net/&version=1.0, aby uzyskać listę adresów IP.

Następnie zezwalam użytkownikowi na wybór adresu IP, a następnie za pomocą kontrolki przeglądarki internetowej pokazuję im login.

Gdy użytkownik się zaloguje, przechwytuję odpowiedź i wyodrębniam token, ale teraz nie jestem do końca pewien, co powinienem zrobić. Token wygląda następująco: -

{"appliesTo":"http://****.azurewebsites.net/", 
"context":null, 
"created":1362069383, 
"expires":1362072983, 
"securityToken":"... a lot of text:-)", 
"tokenType":"urn:ietf:params:oauth:token-type:jwt"} 

Więc zgaduję powinienem wziąć udział token i dodać, że ma część nagłówka Authorization na żądanie otrzymać?

Pytanie 1 to, w jaki sposób powinienem dołączyć token - czy po prostu dołączę token bezpieczeństwa bitowego, czy też muszę podstawić 64 kodować partię i ponownie dołączyć ją jako nagłówek autoryzacji?

Pytanie 2 Jak skonfigurować webapi do obsługi JWT? Po tym, jak zostały zmodyfikowane ACS wydać JWT żetony i zainstalowałem JWTSecurityTokenHandler wciąż otrzymuję następujący błąd (to z uwierzytelnianiem pasywnego):

JWT10310: Unable to validate signature. validationParameters.SigningTokenResolver type: 'System.IdentityModel.Tokens.IssuerTokenResolver', was unable to resolve key to a token. 
The SecurityKeyIdentifier is: 
'SecurityKeyIdentifier 
    (
    IsReadOnly = False, 
    Count = 1, 
    Clause[0] = X509ThumbprintKeyIdentifierClause(Hash = 0x2FEE3EE96B019D4BA0C046124B77C652EEF768E5) 
    ) 
'. validationParameters.SigningToken was null. 

Dzięki

Ross

Odpowiedz

8

Choć aren” t korzystanie z biblioteki uwierzytelniania Azure, this AAL code sample is helpful w celu pokazania, jak używać nowego JWT Token Handler do uwierzytelniania żądań do Web API za pomocą handlerów wiadomości HTTP w potoku żądania. Kod jawnie obsługuje JWT wydane przez ACS. W szczególności spójrz na klasę TokenValidationHandler w Global.asax.cs. Przepływ wygląda następująco:

  1. Przychodzące żądanie aplikacji klienckiej jest sprawdzane przez moduł obsługi komunikatów.
  2. Nagłówek autoryzacji jest sprawdzany i sprawdzany za pomocą JWTTokenHandler.
  3. Jeśli token JWT jest poprawny, JWTTokenHandler tworzy nowy obiekt ClaimsPrincipal. Jeśli token nie jest prawidłowy, zwracana jest nieautoryzowana odpowiedź HTTP 401.

Wracając do pierwszego pytania, wystarczy wartość "securityToken" (coś jak eyJ0eXAiOiJK...), aby nagłówek autoryzacji jak Authorization: Bearer eyJ0eXAiOiJK.... Gdy zostanie to przekazane w żądaniu do interfejsu Web API, JWTTokenHandler sprawdzi poprawność za pomocą modułu obsługi komunikatów. Oczywiście zakłada to, że Twój interfejs Web API został odpowiednio skonfigurowany, aby być świadomym domeny dzierżawy i zabezpieczeń ACS, z której korzystałeś w pierwszej kolejności z tokena z ACS.

Edytuj: Zapoznaj się ze wzorami & zapoznaj się z wytycznymi dotyczącymi zabezpieczania usług REST i uzyskiwania dostępu do nich za pomocą aplikacji mobilnej - bardzo podobny scenariusz, który może pomóc ci uzyskać lepszy kontekst.