Zabezpiecz WebAPI za pomocą JWT
Próbuję napisać aplikację mobilną, która otrzyma dane z witryny opartej na odpoczynku webapi.
Witryna powinna być zabezpieczona przez ACS (ponieważ może być wielu dostawców tożsamości).
Moja aplikacja mobilna sprawdza obecnie następujący adres URLhttps://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 pozwalam użytkownikowi wybrać adres 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 pewien, co powinienem robić. Token wygląda tak: -
{"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ę, że powinienem wziąć część SecurityToken i dodać, że ma część nagłówka Authorization do żądania get?
Pytanie 1 brzmi: jak mam dołączyć token - czy po prostu dołączam token zabezpieczający, czy też muszę zakodować 64 kodowanie i ponownie dołączyć go jako nagłówek autoryzacji?
Pytanie 2 Jak skonfigurować webapi do obsługi JWT? Po zmodyfikowaniu ACS do wydawania tokenów JWT i zainstalowaniu JWTSecurityTokenHandler nadal otrzymuję następujący błąd (to jest z uwierzytelnianiem pasywnym):
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