OAuth3.0 ナレッジサマリー
-
OAuth 2.0 は、アクセス トークンの取得と使用を中心とする承認プロトコルです。
-
認証コード ライセンス プロセスでは、セキュリティを確保し、ユーザー エクスペリエンスを実現するために認証コードを導入する必要があります。
-
OAuth 2.0 は、ユーザーがサードパーティのソフトウェア担当者に動作を委託する委任プロトコルとみなすこともできます。
-
認証コード許可プロセスは、OAuth 2.0 の最も完全で安全な認証方法です。
-
不適切な使用は安全上の問題を引き起こす可能性があるため、さまざまな規制の詳細に従う必要があります。
-
通信のセキュリティを確保するには、HTTPS を使用する必要があります。
-
JWT は OAuth 2.0 の一部ではありませんが、OAuth 2.0 の拡張版です。
-
OAuth 2.0 は、OIDC が ID 認証を実装するためのフレームワークを提供します。
-
OAuth 2.0 のセキュリティを確保するには、サードパーティ ソフトウェアとプラットフォームの両方の当事者がセキュリティ意識を向上させる必要があります。
-
OAuth 2.0 は、認可と認証の問題を解決する効果的なツールです。
モバイルAPPアクセスOAuth3
モバイル アプリに OAuth 2.0 を使用する際の重要なポイントは次のように要約されます。
-
モバイル アプリはサーバーレスとサーバーサイドの 2 つのタイプに分類でき、OAuth 2.0 を使用する後者の方が安全です。
-
サーバーレス アプリは PKCE プロトコルを使用して認証コードの漏洩を防ぐことができますが、app_secret などの機密情報は推奨されません。
-
Webアプリケーションのプロセスと同様に、サーバー経由でアクセストークンを取得できるサーバーサイドアプリがあり、セキュリティが高いです。
-
WeChat やその他のプラットフォームでは、モバイル アプリがバックグラウンド サービスを使用してアクセス トークンを取得することを推奨しています。
-
WeChat ログインなどのサードパーティ ログインを使用する場合、アプリは認証コードを取得し、サーバーはコードと app_secret を使用してアクセス トークンを取得します。
-
機密情報をアプリ側に保存することはお勧めできません。サーバー側を使用すると、セキュリティの問題を回避できます。
-
PKCE プロトコルは、サーバーレス アプリのセキュリティをある程度確保できます。
-
モバイル アプリでは、可能な限りサーバー通信とバックグラウンド通信を使用してアクセス トークンを取得することをお勧めします。
-
OAuth 2.0 の核となる考え方をアプリに適用することで、安全な使用を通じてデータのセキュリティを確保できます。
セキュリティ上のリスクと注意事項
OAuth 2.0 のセキュリティ リスクと予防策は次のように要約できます。
-
CSRF 攻撃は、状態パラメータの state を通じて防止できます。
-
XSS 攻撃では、悪意のあるコードの挿入を防ぐために応答コンテンツをエスケープする必要があります。
-
水平オーバーライドでは、異なるユーザー間でのデータの混乱を避けるために、データの所有権の検証が必要です。
-
認証コードが盗まれた場合は、app_id を確認し、使用されている認証コードを直ちに無効にする必要があります。
-
リダイレクト URI の改ざんには、URI の整合性検証が必要です。
-
セキュリティを確保するには、OAuth 2.0の各種仕様や詳細に準拠する必要があります。
-
これらの脆弱性の一般的な原因は、開発者のセキュリティ意識の欠如です。
-
攻撃者の側から考えることは、さらなるリスク要因を明らかにするのにも役立ちます。
-
OAuth 2.0 は、インターネット全体で共通のセキュリティ リスクにも直面しています。
-
セキュリティ予防策では、考えられるさまざまな攻撃シナリオを包括的に考慮する必要があります。
OAuth3を使用したOIDCの実装
OAuth 2.0 を使用して OIDC を実装すると、次の点が要約できます。
-
OIDC は、OAuth 2.0 に基づいて構築されたオープン ユーザー ID 認証標準プロトコルです。
-
OIDC は、ユーザー識別情報の転送に使用される ID トークンを追加し、サードパーティ ソフトウェアはそれをユーザーのログイン ステータスの記録に使用できます。
-
OIDC は、より多くのユーザー情報を取得するために、サードパーティ ソフトウェア用の新しい UserInfo エンドポイントも追加しました。
-
ID トークンは、iss、sub、aud、exp などの必要なステートメント情報を含む JWT 形式のトークンです。
-
サードパーティ ソフトウェアは、ID トークンのペイロード部分を解析するだけで、ユーザー ID やその他の情報を取得できます。
-
シングル サインオンは、OIDC プロトコルのアプリケーション シナリオです。
-
OAuth 2.0 は、OIDC が ID 認証を実装するための基本的な認可フレームワークを提供します。
-
OIDCを導入する場合は、IDトークンのセキュリティやUserInfo情報の取得などに注意する必要があります。
-
OIDC は、標準の ID 認証ソリューションを提供します。
Spring Security は OAuth 2.0 を実装します
Spring Security を使用して OAuth 2.0 を実装するための重要なポイント:
-
認可サーバーは、JdbcAuthorizationCodeServices を使用して認可コードを保存し、JwtTokenStore を使用して JWT トークンを保存します。
-
リソース サーバーは、ローカル公開キーを使用して JWT トークンを検証し、アクセス許可を検証します。
-
リソース所有者の資格情報のアクセス許可、クライアントの資格情報のアクセス許可、および認可コードのアクセス許可の 3 つのモードをサポートします。
-
TokenEnhancer を追加して、JWT トークンに追加情報を追加できます。
-
シングル サインオンは認可コードの許可によって実現され、OAuth2RestTemplate がリソース サーバーを呼び出します。
-
クライアントは、クライアント情報、トークンエンドポイント、認可エンドポイント、リダイレクト URI などを構成する必要があります。
-
セキュリティ設定には、ログイン ページと認証ページへのアクセス権を開く必要があります。
-
CSRF 攻撃などのセキュリティ リスクを回避するために、トークンの送信には HTTPS を使用するように注意してください。
-
Spring Security OAuth 2.0 は使い方が簡単ですが、ワークフローを理解する必要があります。
OAuth3に基づくマイクロサービスアーキテクチャ
OAuth 2.0/JWT を使用したマイクロサービス リファレンス アーキテクチャの重要なポイント:
-
マイクロサービスは、トラフィック エントリ層、Web アプリケーション層、ゲートウェイ層、BFF 層、ドメイン サービス層の 5 つの層に分けることができます。
-
ゲートウェイ層は、OAuth アクセス トークンの検証と変換、およびスコープベースの認証といった主要なセキュリティ機能を担当します。
-
一般的なアプリケーション シナリオには、ファーストパーティ Web アプリケーション、ファーストパーティ モバイル アプリケーション、サードパーティ Web アプリケーションが含まれます。
-
IDP サービスは、OAuth プロトコル処理、トークン管理、およびユーザー認証を担当します。
-
フロントエンドは OAuth アクセス トークンを介して認証し、バックエンドはユーザー情報を含む JWT トークンを介して認証します。
-
ゲートウェイは 2 つのトークン間で変換を行い、混合使用を可能にします。
-
従来の Web アプリケーションとは異なり、マイクロサービスはサービスの自律性、柔軟なスケーリング、ステートレス性を重視しています。
-
マイクロサービス セキュリティは、ゼロ認証、きめ細かい認証、ステートレス セッションを目指しています。
-
マイクロサービスのセキュリティ メカニズムを理解すると、OAuth 2.0 の展開と運用に役立ちます。
オープン プラットフォームが Oauth3 を使用する方法
-
オープンプラットフォームシステムの全体構造:
- サードパーティ ソフトウェア: オープン プラットフォームに接続してサードパーティ開発者または ISV によって実装されるアプリケーション ソフトウェア。
- オープン プラットフォーム: API ゲートウェイ サービス、OAuth 2.0 認証サービス、サードパーティ ソフトウェア開発者センター サービスが含まれます。
- 保護されたリソース サービス: オープン プラットフォームによって提供される API サービスには、アクセスする前に OAuth 2.0 認証が必要です。
-
主要なオープン プラットフォームの認可手順:
- 認証コードライセンスプロセスを使用することをお勧めします。
- WeChat、Alipay、Meituan などのオープン プラットフォームの認証フローチャートには、すべて認証コードに関連するテキストが含まれています。
-
認可コードプロセスのパラメータの説明:
- リダイレクトプロセスで使用されるパラメータ:response_type、client_id、redirect_uri。
- 認可エンドポイントは、Xiaotu ソフトウェアによって使用されるパラメータ (コード、状態) に応答します。
- アクセス トークンを申請するときに渡す必要がある基本パラメーター: Grant_type、client_id、client_secret、code。
- トークン エンドポイントは、Xiaotu ソフトウェアに関連するパラメーター (access_token、token_type、expires_in、refresh_token、scope) に応答します。