コンテンツにスキップ

セキュリティ

セキュリティ、認証、認可を処理するには多くの方法があります。

そして、それは通常、複雑で「難しい」トピックです。

多くのフレームワークやシステムでは、セキュリティと認証の処理だけで多くの労力とコードが必要になります(多くの場合、記述されたコード全体の50%以上になる可能性があります)。

FastAPIは、セキュリティを簡単、迅速、標準的な方法で、すべてのセキュリティ仕様を学習することなく処理するのに役立つツールをいくつか提供します。

しかし、最初にいくつかの小さな概念を確認しましょう。

お急ぎですか?

これらの用語のいずれも気にせず、ユーザー名とパスワードに基づく認証によるセキュリティを*すぐに*追加する必要がある場合は、次の章に進んでください。

OAuth2

OAuth2は、認証と認可を処理するいくつかの方法を定義する仕様です。

これはかなり広範な仕様であり、いくつかの複雑なユースケースを網羅しています。

「サードパーティ」を使用して認証する方法が含まれています。

これは、「Facebook、Google、Twitter、GitHubでログイン」するすべてのシステムが内部で使用しているものです。

OAuth 1

OAuth 1がありましたが、これはOAuth2とは大きく異なり、通信の暗号化方法に関する直接的な仕様が含まれていたため、より複雑でした。

今日ではあまり普及しておらず、使用されていません。

OAuth2は通信の暗号化方法を指定していません。アプリケーションがHTTPSで提供されていることを想定しています。

ヒント

**デプロイ**に関するセクションでは、TraefikとLet's Encryptを使用してHTTPSを無料で設定する方法について説明します。

OpenID Connect

OpenID Connectは、**OAuth2**に基づく別の仕様です。

OAuth2であいまいにされているいくつかのことを指定して拡張するだけで、相互運用性を高めようとしています。

たとえば、GoogleログインはOpenID Connect(内部ではOAuth2を使用)を使用します。

しかし、FacebookログインはOpenID Connectをサポートしていません。独自のOAuth2フレーバーを持っています。

OpenID("OpenID Connect"ではありません)

「OpenID」仕様もありました。これは**OpenID Connect**と同じことを解決しようとしましたが、OAuth2に基づいていませんでした。

そのため、完全に追加のシステムでした。

今日ではあまり普及しておらず、使用されていません。

OpenAPI

OpenAPI(以前はSwaggerとして知られていました)は、APIを構築するためのオープン仕様です(現在はLinux Foundationの一部です)。

**FastAPI**は**OpenAPI**に基づいています。

これにより、複数の自動インタラクティブドキュメントインターフェース、コード生成などが可能になります。

OpenAPIには、複数のセキュリティ「スキーム」を定義する方法があります。

これらを使用することで、インタラクティブドキュメントシステムを含む、これらの標準ベースのすべてのツールの利点を得ることができます。

OpenAPIは、次のセキュリティスキームを定義しています

  • apiKey:次の場所から取得できるアプリケーション固有のキー
    • クエリパラメータ。
    • ヘッダー。
    • Cookie。
  • http:次を含む標準HTTP認証システム
    • bearer:値がBearerとトークンのヘッダーAuthorization。これはOAuth2から継承されています。
    • HTTPベーシック認証。
    • HTTPダイジェストなど。
  • oauth2:セキュリティを処理するすべてのOAuth2の方法(「フロー」と呼ばれます)。
    • これらのフローのいくつかは、OAuth 2.0 認証プロバイダー(Google、Facebook、Twitter、GitHubなど)の構築に適しています。
      • implicit
      • clientCredentials
      • authorizationCode
    • しかし、同じアプリケーション内で直接認証を処理するために最適に使用できる特定の「フロー」が1つあります。
      • password:この例については、後の章で説明します。
  • openIdConnect:OAuth2 認証データを自動的に検出する方法を定義できます。
    • この自動検出は、OpenID Connect 仕様で定義されているものです。

ヒント

Google、Facebook、Twitter、GitHubなどの他の認証/認可プロバイダーの統合も可能で、比較的簡単です。

最も複雑な問題は、これらの認証/認可プロバイダーを構築することですが、**FastAPI** は、面倒な作業を代行しながら、簡単にそれを実現するためのツールを提供します。

**FastAPI** ユーティリティ

FastAPI は、fastapi.security モジュールに、これらのセキュリティスキームそれぞれに対応するツールを提供しており、これらのセキュリティメカニズムの使用を簡素化します。

次の章では、**FastAPI** が提供するこれらのツールを使用して、API にセキュリティを追加する方法について説明します。

また、インタラクティブドキュメントシステムに自動的に統合される方法についても説明します。