[iOS] JWTDecode.swiftを使ってJWTをデコードする

2019.04.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんばんは。モバイルアプリサービス部の平屋です。

本記事では、JWTDecode.swiftを使ってJWTをデコードする実装を紹介します。

検証環境

  • macOS Mojave 10.14.4
  • Xcode Version 10.1
  • CocoaPods 1.6.1

導入

CocoaPodsやCarthageなどを使用して導入できます。

Cocoapods

use_frameworks!
pod 'JWTDecode', '~> 2.2'

Carthage

github "auth0/JWTDecode.swift" ~> 2.2

実装

decode(jwt:) メソッドを使用してJWTオブジェクトを取得し、JWTオブジェクトから必要な値を取り出します。

// JWT (https://jwt.io/に記載されているサンプル)
let jwtText = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"

// ヘッダー、ボディの値を取り出す
guard let jwt = try? decode(jwt: jwtText),
    let algorithm = jwt.header["alg"],
    let type = jwt.header["typ"],
    let subject = jwt.body["sub"] as? String,
    let name = jwt.body["name"] as? String,
    let issuedAt = jwt.body["iat"] as? Int else {
        return
}

// ログ出力する
print("[HEADER] algorithm:\(algorithm), type:\(type)")
print("[PAYLOAD] subject:\(subject), name:\(name), issuedAt:\(issuedAt)")

動作確認

サンプルコードを実行すると、以下のログが得られました。

[HEADER] algorithm:HS256, type:JWT
[PAYLOAD] subject:1234567890, name:John Doe, issuedAt:1516239022

参考資料