Ktor Server における Bearer 認証
必要な依存関係: io.ktor:ktor-server-auth
コード例: auth-bearer
Bearer 認証スキームは、アクセス制御と認証に使用される HTTP フレームワークの一部です。このスキームには、Bearer トークンと呼ばれるセキュリティトークンが含まれます。Bearer 認証スキームは OAuth または JWT の一部として使用されますが、Bearer トークンを認可するためのカスタムロジックを提供することもできます。
Ktor における認証の全般的な情報については、Ktor Server における認証と認可セクションを参照してください。
Bearer 認証は HTTPS/TLS 経由でのみ使用してください。
依存関係の追加
bearer 認証を有効にするには、ビルドスクリプトに ktor-server-auth アーティファクトを含める必要があります。
Bearer 認証のフロー
一般的に、Bearer 認証のフローは次のようになります。
- ユーザーが正常に認証およびアクセスの認可を受けた後、サーバーはクライアントにアクセストークンを返します。
- クライアントは、
Bearerスキーマを使用してAuthorizationヘッダーにトークンを渡し、保護されたリソースにリクエストを行うことができます。HTTPGET http://localhost:8080/ Authorization: Bearer abc123 - サーバーはリクエストを受信し、トークンを検証します。
- 検証後、サーバーは保護されたリソースの内容をレスポンスとして返します。
Bearer 認証のインストール
bearer 認証プロバイダーをインストールするには、install ブロック内で bearer 関数を呼び出します。
import io.ktor.server.application.*
import io.ktor.server.auth.*
// ...
install(Authentication) {
bearer {
// Bearer 認証の設定
}
}オプションで、特定のルートを認証するために使用できるプロバイダー名を指定できます。
Bearer 認証の設定
Ktor でのさまざまな認証プロバイダーの設定方法の概要については、認証の設定を参照してください。このセクションでは、bearer 認証プロバイダー固有の設定について説明します。
ステップ 1: Bearer プロバイダーの設定
bearer 認証プロバイダーは、BearerAuthenticationProvider.Configuration クラスを介して設定を公開します。以下の例では、次の設定が指定されています。
realmプロパティは、WWW-Authenticateヘッダーで渡される realm を設定します。authenticate関数は、クライアントから送信されたトークンをチェックし、認証に成功した場合はUserIdPrincipalを、失敗した場合はnullを返します。
install(Authentication) {
bearer("auth-bearer") {
realm = "Access to the '/' path"
authenticate { tokenCredential ->
if (tokenCredential.token == "abc123") {
UserIdPrincipal("jetbrains")
} else {
null
}
}
}
}ステップ 2: 特定のリソースの保護
bearer プロバイダーを設定した後、authenticate 関数を使用してアプリケーション内の特定のリソースを保護できます。認証に成功した場合、ルートハンドラー内で call.principal 関数を使用して認証済みの UserIdPrincipal を取得し、認証されたユーザーの名前を取得できます。
routing {
authenticate("auth-bearer") {
get("/") {
call.respondText("Hello, ${call.principal<UserIdPrincipal>()?.name}!")
}
}
}