OAuth2 プロバイダーサーバーコンポーネントを使用すると、外部 OAuth2 プロバイダー(Azure AD や Google など)を使用して認証し、サーバーの保護されたリソースにアクセスできます。例: Azure 認証情報を使用してユーザーがログインできるように HTTP サーバーを設定できます。ログインが成功すると、それらのユーザーはサーバーの保護されたリソースにアクセスできるようになります。
認証プロセスはサーバー側で行われ、OAuth2 トークンはクライアントと共有されません。つまり、ユーザーが Azure などを使用してログインした場合、認証が成功すると、Azure はユーザープロファイルに関する情報(スコープに応じて)、メールなどを Azure サーバーからリクエストするためのアクセストークンを返します。このアクセストークンはクライアント(例えば Web ブラウザ)には共有されません。クライアントにアクセストークンを返す代わりに、サーバーは内部でアクセストークンにリンクされたランダム ID を作成します。クライアント(Web ブラウザ)が OAuth2 サーバーへの呼び出しを行うたびに、この公開 ID を使用し、サーバーはこの ID を使用して HTTP リクエストをプロキシするための OAuth2 アクセストークンを取得します。
OAuth2 認証の動作例を以下に示します。この例では、次のリンクで説明されている Azure AD 設定を使用します: OAuth2 プロバイダー Azure AD。
サーバーを起動する
サーバーは localhost とポート 443 でリッスンを開始します。sgcWebSockets HTTP サーバーは OAuth2 サーバープロバイダーコンポーネントにリンクされており、Authentication プロパティが有効になっています。
サーバーが起動される前に、Azure OAuth2 プロバイダーは以下のメソッド呼び出しを使用して登録されます。
RegisterProvider(
'azure',
'90945b8d-f6b7-4b97-b2bd-21c3c90b5f3x',
'PN67Q~5m06c-~X_GMyMf9zMntmm5l2dt~3jVq',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token',
'user.read',
'/login',
'https://localhost/callback'
);
ユーザーログイン
ユーザーが新しいWebブラウザーを開き、'/login' エンドポイントにアクセスします。
サーバーは、Azure プロバイダーを使用してログインするために「/login」エンドポイントが使用されていることを検出し、以下にリダイレクトします。
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize
OAuth2 認証フローが開始されます。
OAuth2 Authentication
ユーザーは OAuth2 サーバー認証エンドポイントにリダイレクトされます。ここで資格情報を使用してログインし、OAuth2 アプリケーションの利用規約に同意する必要があります。
認可が成功すると、Azure ADはCodeをURLに送信します
https://localhost/callback
OAuth2 Codeを検証する
現在、サーバーは Azure からコードを受け取り、このトークンが正しいことを検証するために Azure への内部接続 (サーバーからサーバーへ) を行います (誰かがサーバーをハッキングしようとしていないことを確認するため)。
サーバーが接続する先
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token
受信したコードやclientsecretなどのパラメータを渡し、検証が成功すると、Azureはアクセストークンを返します。これは、プロフィールやメールの読み取りなど、Azure Protected Resourcesへのアクセスに使用できます。
アクセストークン成功
サーバーが正常な AccessToken を受信すると、イベント OnOAuth2ProviderTokenValid が呼び出されます。ここでパラメータークラス TsgcHTTPOAuth2ProviderToken にアクセスして AccessToken の保存方法(保存する場合)を設定できます
AccesToken: Azure によって返された OAuth2 トークンです。
ID: Cookieとして保存されるパブリック識別子です。
このイベントでは、認証成功後に何をするかを設定できます。例: ユーザーをプライベート URL にリダイレクトしたい場合は、以下を使用します。
Response.Redirect.URL := 'https://localhost/private';
Azure へのリクエスト送信
これで、Cookie として保存された公開 ID を使用して Azure サーバーにリクエストを送信できます。
例:プロファイルデータを読み取りたい場合は、以下のメソッドを使用します。
Get('ID', 'https://graph.microsoft.com/v1.0/me');
ID はパブリック ID 識別子です。