この記事は Google Cloud Translation APIを使用した自動翻訳です。
いくつかの文書は原文を読むのに良いかもしれません。
#KotlinとJWT:高度なトピックとベストプラクティス
開発学習ブログは、別の包括的で実践志向の記事へようこそ。今回はKotlinとJWTについて説明します。開発に関する高度なトピックとベストプラクティスを扱う予定なので、Kotlin開発者は自分のスキルを次のレベルに引き上げることができます。
いつものように、読者にブログが他の言語でも提供されることを思い出させたいと思います。この記事をドイツ語で読みたい場合は、[ここ]()をクリックしてください。この記事をスペイン語で読むには、[ここ]()をクリックしてください。
##コトリンとは?
KotlinはJava Virtual Machine(JVM)で実行される静的に型指定されたプログラミング言語であり、JavaScriptソースコードにコンパイルすることもできます。 Kotlinは、IntelliJ IDEA IDEを作成した会社JetBrainsによって開発されました。
Kotlinプロジェクトは2010年に始まり、最初の安定版リリースは2016年2月でした。それ以来、Kotlinは最も人気のあるプログラミング言語の1つになり、現在Android開発の公式言語です。
JWTはパブリックスタンダード([RFC 7519](https://www.rfc-editor.org/rfc/rfc7519.txt))で、当事者間で情報をJSONオブジェクトに転送する簡潔で独立した方法を定義します。この情報はデジタル署名されているため、確認して信頼できます。 JWTは秘密鍵または公開/秘密鍵のペアを使用して署名できます。
JWTは、分散システムにおける当事者間の認証と情報交換に使用されます。一般的なシナリオでは、ユーザーはサードパーティのサービスとして認証され、サービスはユーザーが他のリソースにアクセスするために使用できるJWTを発行します。
KotlinをJWTと組み合わせて使用すると、多くの利点があります。まず、Kotlinは非常に簡潔な言語であり、JWT形式も簡潔です。したがって、KotlinでJWTベースのアプリケーションを簡単に読み書きできます。第二に、KotlinはJWTクレームとペイロード操作を容易にする様々なJSONライブラリをすばやくサポートしています。最後に、Kotlinの型システムとnull安全機能は、JWTで作業するときの一般的なエラーを防ぐのに役立ちます。
このセクションでは、KotlinとJWTを起動する方法を説明します。 KotlinとJSONの基本にすでに慣れているとします。
コーディングを開始する前に、KotlinコンパイラとJSONライブラリをインストールする必要があります。 [Kotlin Compiler](https://kotlinlang.org/docs/tutorials/command-line.html)と[Jackson](https://github.com/FasterXML/jackson)ライブラリを使用します。
Kotlinは、MavenやGradleなどのパッケージマネージャを使用してインストールできます。 Jacksonの場合、 build.gradle
ファイルに次の依存関係を追加する必要があります。
「groovy
implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.+'
###プロジェクトの作成
これですべての依存関係がインストールされたので、新しいKotlinプロジェクトを作成できます。プロジェクト名を「jwt-kotlin」と指定します。
### JWTの生成
これでプロジェクトが設定されているので、いくつかのコードを書くことができます。 JWTを生成する関数を書くことから始めましょう。 `jwk-set-pub`ライブラリを使ってJWTを生成します。
```kotlin
import com.auth0.jwk.JwkSet
import com.auth0.jwk.Jwk
fun generateJwt(jwkSet: JwkSet, keyId: String): String {
// Get the JWK for the given key ID
val jwk: Jwk = jwkSet.getKey(keyId)
// Create a JWT with the JWK
val jwt = JWT(jwk)
// Set the claims
jwt.claims
.setSubject("kotlin-jwt")
.setIssuer("https://kotlin-jwt.com")
.setExpiration(Date(Date().time + 5 * 60 * 1000)) // 5 minutes
// Sign the JWT
return jwt.sign()
}
上記のコードスニペットでは、まず jwk-set-pub
ライブラリをインポートしました。次に、 JwkSet
と keyId
を入力として使用し、JWTを含む String
を返す関数を作成しました。次に、JwkSet
で指定されたkeyId
のJWKを検索しました。
それから JWK
を使って新しい JWT
オブジェクトを作成しました。次に、「JWT」の請求を設定します。この例では、subject
、issuer
、およびexpiration
クレームを設定します。最後に、 sign()
メソッドで JWT
に署名し、署名された JWT
を返しました。
これでJWTを生成する方法がわかったので、JWTをチェックする関数を書いてみましょう。 jwk-set-pub
ライブラリを使ってJWTを確認してください。
import com.auth0.jwk.JwkSet
import com.auth0.jwk.Jwk
fun verifyJwt(jwkSet: JwkSet, jwt: String): Boolean {
// Get the header from the JWT
val header: Map<String, Any> = JWT.getHeader(jwt)
// Get the kid from the header
val kid: String? = header["kid"] as String?
// Get the JWK for the given kid
val jwk: Jwk = jwkSet.getKey(kid)
// Verify the JWT
return JWT.verify(jwt, jwk)
}
上記のコードスニペットでは、まず jwk-set-pub
ライブラリをインポートしました。次に、 JwkSet
と jwt
を入力として使用し、 jwt
が有効かどうかを示す Boolean
を返す関数を作成しました。
次に、 getHeader()
メソッドを使って jwt
からヘッダーを検索しました。その後、ヘッダーから「kid」を検索しました。それから JwkSet
で与えられた kid
の JWK
を検索しました。最後に、 verify()
メソッドで jwt
をチェックして結果を返しました。
このセクションでは、KotlinとJWTに関するいくつかの高度なトピックについて説明します。
前のセクションでは、JWTを作成して確認する方法について説明しました。このセクションでは、JWTをエンコードしてデコードする方法について説明します。これには jwt-kotlin
ライブラリを使用します。
jwt-kotlin
ライブラリは JWT エンコーディングのための JWT.encode()
メソッドと JWT デコードのための JWT.decode()
メソッドを提供します。
JWT.encode()
メソッドは JWT
オブジェクトと Encoder
オブジェクトを入力として使用し、 JWT
を String
にエンコードします。 Encoder オブジェクトは、使用するエンコードアルゴリズムを定義します。 jwt-kotlin
ライブラリはこのためにBase64Encoder
クラスを提供します。
JWT.decode()
メソッドは、JWT オブジェクトと Decoder
オブジェクトを含む String
を入力として使用し、 JWT
を JWT
オブジェクトにデコードします。 Decoder
オブジェクトは使用するデコードアルゴリズムを定義します。 jwt-kotlin
ライブラリはこのために Base64Decoder
クラスを提供します。
このセクションでは、WebアプリケーションでJWTを使用する方法について説明します。これには jwt-kotlin
と jwt-kotlin-web
ライブラリを使用します。
jwt-kotlin-web
ライブラリはJwtCookie
とJwtSession
クラスを提供し、WebアプリケーションでJWTで簡単に作業できるようにします。
「JwtCookie」クラスは、クッキーに格納されているJWTを表します。 JwtCookie
クラスは、クッキーからJWTを取得および設定するための get()
および set()
メソッドを提供します。
「JwtSession」クラスは、セッションに格納されているJWTを表します。 JwtSession
クラスは、セッションからJWTを取得および設定するための get()
および set()
メソッドを提供します。
このセクションでは、KotlinとJWTの使用に関するいくつかのベストプラクティスについて説明します。
KotlinでJWTを扱うときは、jwt-kotlin
のようなライブラリを使うのが最善です。 jwt-kotlin
ライブラリは、JWT操作に役立ついくつかの関数とクラスを提供します。
JWTで作業するときは、秘密を安全に保つことが重要です。秘密はプレーンテキストまたはソースコードに保存しないでください。構成ファイルやデータベースなどの安全な場所に保存する必要があります。
JWTは再使用しないでください。 JWTを使用したら、無効にして新しいJWTを作成する必要があります。
JWTで作業するときは、無効化されたJWTのブラックリストを維持することをお勧めします。これは再生攻撃を防ぐのに役立ちます。
##結論
この記事では、KotlinとJWTについて説明しました。開発に関する高度なトピックとベストプラクティスを扱ったので、Kotlin開発者は自分のスキルを次のレベルに引き上げることができます。