sgcWebSockets 4.4.5 から、サーバーコンポーネントで OAuth2 プロトコルがサポートされています。
OAuth2 は、リソースオーナーに代わって、または第三者アプリケーション自身の権限で HTTP サービスへの限定的なアクセスを第三者アプリケーションに許可します。OAuth2 により、サービスプロバイダーとコンシューマーアプリケーションは安全な方法で相互にやり取りできます。
TsgcHTTP_OAuth2_Server
このコンポーネントは、サーバーサイドコンポーネントに OAuth2 プロトコルの実装を提供します。
サーバーコンポーネントには Authorization.OAuth.OAuth2 というプロパティがあり、TsgcHTTP_OAuth2_Server のインスタンスを割り当てることができます。認証が有効でかつ OAuth2 プロパティが OAuth2 サーバーコンポーネントに紐付けられている場合、WebSocket および HTTP リクエストの処理にはベアラートークンが必要です。トークンがない場合、接続は自動的に閉じられます。
Sample Example
TsgcWebSocketHTTPServer を使用したシンプルな OAuth2 サーバーの例を試してみましょう。
まず、ポート 443 でリッスンし、sgc.pem ファイルの自己署名証明書を使用する新しい TsgcWebSocketHTTPServer を作成します。
oServer := TsgcWebSocketHTTPServer.Create(nil); oServer.Port := 80; oServer.SSLOptions.Port := 443; oServer.SSLOptions.CertFile := 'sgc.pem'; oServer.SSLOptions.KeyFile := 'sgc.pem'; oServer.SSLOptions.RootCertFile := 'sgc.pem'; oServer.SSL := True;
次に、TsgcHTTP_OAuth2_Server の新しいインスタンスを作成し、先ほど作成したサーバーに割り当てます。
以下の値で新しいアプリケーションを登録します。
Name: MyApp
RedirectURI: http://127.0.0.1:8080
ClientId: client-id
ClientSecret: client-secret
OAuth2 := TsgcHTTP_OAuth2_Server.Create(nil);
OAuth2.Apps.AddApp('MyApp', 'http://127.0.0.1:8080', 'client-id', 'client-secret');
oServer.Authentication.Enabled := True;
oServer.Authentication.OAuth.OAuth2 := OAuth2;
次に、OAuth2 サーバーコンポーネントの OnOAuth2Authentication イベントを処理し、ユーザーのログイン方法を独自に実装します。ここでは "user/secret" のペアを使用してログインを承認します。
procedure OnAuth2Authentication(Connection: TsgcWSConnection; OAuth2: TsgcHTTPOAuth2Request; aUser, aPassword: string; var Authenticated: Boolean);
begin
if ((aUser = 'user') and (aPassword = 'secret')) then
Authenticated := True;
end;
最後にサーバーを起動し、OAuth2 クライアントでログインします。例えば sgcWebSockets ライブラリに含まれている TsgcHTTP_OAuth2_Client を使用できます。

新しいアクセストークンをリクエストすると、新しい Web ブラウザーセッションが表示され、ユーザーは接続を許可してからログインする必要があります。

ログインが成功すると、新しいトークンがクライアントに返されます。以降のすべてのリクエストは HTTP ヘッダーにこのベアラートークンを含める必要があります。

