Ktorサーバーでのベアラー認証
必要な依存関係: io.ktor:ktor-server-auth
コード例: auth-bearer
ベアラー認証スキームは、アクセス制御と認証に使用されるHTTPフレームワークの一部です。このスキームには、ベアラー・トークンと呼ばれるセキュリティトークンが関与します。ベアラー認証スキームはOAuthまたはJWTの一部として使用されますが、ベアラー・トークンを認可するためのカスタムロジックを提供することもできます。
Ktorでの認証に関する一般的な情報は、Ktorサーバーでの認証と認可のセクションで確認できます。
ベアラー認証はHTTPS/TLS経由でのみ使用すべきです。
依存関係の追加
bearer
認証を有効にするには、ビルドスクリプトにktor-server-auth
アーティファクトを含める必要があります。
ベアラー認証フロー
一般的に、ベアラー認証フローは次のようになります。
- ユーザーが認証とアクセス認可に成功した後、サーバーはクライアントにアクセストークンを返します。
- クライアントは
Bearer
スキームを使用してAuthorization
ヘッダーでトークンを渡して、保護されたリソースにリクエストを行うことができます。HTTPGET http://localhost:8080/ Authorization: Bearer abc123
- サーバーはリクエストを受信し、トークンを検証します。
- 検証後、サーバーは保護されたリソースの内容を応答します。
ベアラー認証のインストール
bearer
認証プロバイダーをインストールするには、install
ブロック内でbearer関数を呼び出します。
import io.ktor.server.application.*
import io.ktor.server.auth.*
// ...
install(Authentication) {
bearer {
// Configure bearer authentication
}
}
オプションで、指定されたルートを認証するために使用できるプロバイダー名を指定できます。
ベアラー認証の構成
Ktorでさまざまな認証プロバイダーを構成する方法の一般的なアイデアを得るには、認証の構成を参照してください。このセクションでは、bearer
認証プロバイダーの構成の詳細について説明します。
ステップ1:ベアラープロバイダーの構成
bearer
認証プロバイダーは、その設定をBearerAuthenticationProvider.Configurationクラスを介して公開します。以下の例では、次の設定が指定されています。
realm
プロパティは、WWW-Authenticate
ヘッダーで渡されるレルムを設定します。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}!")
}
}
}