ライブラリを使用して大丈夫です場合、私はこのhttps://github.com/auth0/JWTDecode.swift
を示唆して、ライブラリimport JWTDecode
をインポートし、実行します。
let jwt = try decode(jwt: token)
あなたはこのライブラリを含めるようにしたくなかったので、私はそれを動作させるために必要な部品を出しました。
func decode(jwtToken jwt: String) -> [String: Any] {
let segments = jwt.components(separatedBy: ".")
return decodeJWTPart(segments[1]) ?? [:]
}
func base64UrlDecode(_ value: String) -> Data? {
var base64 = value
.replacingOccurrences(of: "-", with: "+")
.replacingOccurrences(of: "_", with: "/")
let length = Double(base64.lengthOfBytes(using: String.Encoding.utf8))
let requiredLength = 4 * ceil(length/4.0)
let paddingLength = requiredLength - length
if paddingLength > 0 {
let padding = "".padding(toLength: Int(paddingLength), withPad: "=", startingAt: 0)
base64 = base64 + padding
}
return Data(base64Encoded: base64, options: .ignoreUnknownCharacters)
}
func decodeJWTPart(_ value: String) -> [String: Any]? {
guard let bodyData = base64UrlDecode(value),
let json = try? JSONSerialization.jsonObject(with: bodyData, options: []), let payload = json as? [String: Any] else {
return nil
}
return payload
}
はこのようにそれを呼び出します。
decode(jwtToken: TOKEN)
ありがとうございます。しかし、私はJWTライブラリを使用することはできません。フレームワークで実装しています。簡単な実装が欲しいです。使用するアンドロイドで String [] split = JWTEncoded.split( "\\。"); 文字列body = getJson(split [1]); Log.d( "JWT_DECODED"、 "Body:" + body); private static String getJson(String strEncoded)throws UnsupportedEncodingException { byte [] decodedBytes = Base64.decode(strEncoded、Base64.URL_SAFE); 新しい文字列を返します(decodedBytes、 "UTF-8")。 } –
私の答えに編集を参照してください。 –