OAuth2 Provider | Authentication

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 識別子です。