2016-06-08 14 views
5

Mam jwt tokena jak tenJak mogę dekodować token JWT w Androidzie?

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 

Jak mogę rozszyfrować to tak, że mogę dostać ładunek jak ten

{ 
    "sub": "1234567890", 
    "name": "John Doe", 
    "admin": true 
} 

użyłem this biblioteki, ale nie może znaleźć sposób robić to, co chcę

Odpowiedz

1

Użyłem w aplikacji internetowej Java i kod będzie wyglądać jak poniżej: -

Jwts.parser().setSigningKey('secret-key').parseClaimsJws(token).getBody() 

Zwróci reklamacje zawierające wymagane wartości.

19

należy podzielić ciąg: Jeśli przechodzą dwie pierwsze sekcje poprzez dekoder podstawa 64, otrzymasz następujące (formatowanie dodana dla jasności):

nagłówek

{ 
    "alg": "HS256", 
    "typ": "JWT" 
} 

ciało

{ 
    "sub": "1234567890", 
    "name": "John Doe", 
    "admin": true 
} 

przykładem Kod:

public class JWTUtils { 

    public static void decoded(String JWTEncoded) throws Exception { 
     try { 
      String[] split = JWTEncoded.split("\\."); 
      Log.d("JWT_DECODED", "Header: " + getJson(split[0])); 
      Log.d("JWT_DECODED", "Body: " + getJson(split[1])); 
     } catch (UnsupportedEncodingException e) { 
      //Error 
     } 
    } 

    private static String getJson(String strEncoded) throws UnsupportedEncodingException{ 
     byte[] decodedBytes = Base64.decode(strEncoded, Base64.URL_SAFE); 
     return new String(decodedBytes, "UTF-8"); 
    } 
} 
Metoda

Zaproszenie na przykład

JWTUtils.decoded("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"); 

Reference Library: test https://github.com/jwtk/jjwt

JWT: https://jwt.io/

0

użyłem trzeci biblioteki strona o nazwie JWTDecode.Android https://github.com/auth0/JWTDecode.Android. Dokumentacja jest dość dobra. Z twojego pytania, Sub, nazwa itd. Są częścią ciała i nazywają się Roszczenia. Można je dostać w ten sposób stosując powyższą Biblioteka:

JWT parsedJWT = new JWT(jwtToken); 
    Claim subscriptionMetaData = parsedJWT.getClaim("name"); 
    String parsedValue = subscriptionMetaData.asString(); 
0

Działa przy użyciu języka Java 8 w Base64 Klasa:

public String getDecodedJwt(String jwt) 
{ 
    String result = ""; 

    String[] parts = jwt.split("[.]"); 
    try 
    { 
    int index = 0; 
    for(String part: parts) 
    { 
     if (index >= 2) 
     break; 

     index++; 
     byte[] partAsBytes = part.getBytes("UTF-8"); 
     String decodedPart = new String(java.util.Base64.getUrlDecoder().decode(partAsBytes), "UTF-8"); 

     result += decodedPart; 
    } 
    } 
    catch(Exception e) 
    { 
    throw new RuntimeException("Couldnt decode jwt", e); 
    } 

    return result; 
} 
+0

Problem polega na tym, że to działa tylko od 26 API – Thecave3

Powiązane problemy