Delphi OpenID Connect クライアント
Google、Microsoft Entra ID、Okta、Auth0、Keycloak、AWS Cognito でユーザーをサインインさせ、その身元を確認します。このコンポーネントはプロバイダーを検出し、PKCE と nonce を使ったブラウザフローを実行し、返却されたIDトークンを検証します。
Google、Microsoft Entra ID、Okta、Auth0、Keycloak、AWS Cognito でユーザーをサインインさせ、その身元を確認します。このコンポーネントはプロバイダーを検出し、PKCE と nonce を使ったブラウザフローを実行し、返却されたIDトークンを検証します。
OAuth2 クライアントに OpenID Connect の ID レイヤーを追加します。ディスカバリー、既定で有効な PKCE と nonce、プロバイダーの署名鍵によるIDトークン検証、userinfo エンドポイントを提供します。
TsgcHTTP_OIDC_Client(ユニット sgcAuth_OIDC_Client)
Windows, macOS, Linux, iOS, Android
Enterprise および All-Access、加えて sgcAuth パックでも利用できます。sgcWebSockets .NET でも利用可能です。
OIDCOptions.Issuer とクライアント資格情報を設定して Start を呼び出し、OnOIDCIDToken で検証済みのクレームを読み取ります。エンドポイントが未設定の場合、ディスカバリーは自動的に実行されます。
uses
sgcAuth_OIDC_Client;
// OIDC はフォームフィールドです:OIDC: TsgcHTTP_OIDC_Client;
procedure TForm1.SignIn;
begin
OIDC := TsgcHTTP_OIDC_Client.Create(nil);
OIDC.OnOIDCIDToken := OnOIDCIDTokenEvent;
OIDC.OIDCOptions.Issuer := 'https://accounts.google.com';
OIDC.OAuth2Options.ClientId := 'your-client-id';
OIDC.OAuth2Options.ClientSecret := 'your-client-secret';
OIDC.AuthorizationServerOptions.Scope.Clear;
OIDC.AuthorizationServerOptions.Scope.Add('openid');
OIDC.AuthorizationServerOptions.Scope.Add('profile');
OIDC.AuthorizationServerOptions.Scope.Add('email');
OIDC.LocalServerOptions.IP := '127.0.0.1';
OIDC.LocalServerOptions.Port := 8080;
OIDC.LocalServerOptions.RedirectURL := 'http://127.0.0.1:8080/';
// ディスカバリーの後、PKCE と nonce を使ったブラウザサインインへ
OIDC.Start;
end;
procedure TForm1.OnOIDCIDTokenEvent(Sender: TObject; const aClaims: string;
aValid: Boolean; const aError: string);
begin
if aValid then
Memo1.Lines.Text := aClaims // sub、email、name などを含む JSON
else
ShowMessage(aError);
end;
// uses: sgcAuth_OIDC_Client
TsgcHTTP_OIDC_Client *OIDC = new TsgcHTTP_OIDC_Client(this);
OIDC->OnOIDCIDToken = OnOIDCIDTokenEvent;
OIDC->OIDCOptions->Issuer = "https://accounts.google.com";
OIDC->OAuth2Options->ClientId = "your-client-id";
OIDC->OAuth2Options->ClientSecret = "your-client-secret";
OIDC->AuthorizationServerOptions->Scope->Clear();
OIDC->AuthorizationServerOptions->Scope->Add("openid");
OIDC->AuthorizationServerOptions->Scope->Add("profile");
OIDC->AuthorizationServerOptions->Scope->Add("email");
OIDC->LocalServerOptions->IP = "127.0.0.1";
OIDC->LocalServerOptions->Port = 8080;
OIDC->LocalServerOptions->RedirectURL = "http://127.0.0.1:8080/";
OIDC->Start();
OAuth2 クライアントの機能に加え、アクセストークンを信頼できるIDへと変える検証をすべて備えています。
Discover は OIDCOptions.Issuer のプロバイダー構成を読み取り、認可URL、トークンURL、JWKSURI、UserInfoEndpoint、EndSessionEndpoint を設定します。生のJSONは DiscoveryDocument に保持されます。
OIDCOptions.UsePKCE は標準で有効になっており、サインインのたびに新しい Nonce が送信されて IDトークンで照合されるため、傍受されたコードやリプレイされたトークンは無効になります。
署名、発行者、対象者、(ClockSkew を考慮した)有効期限、nonce が検証されます。受け入れられるのは RS256、RS384、RS512、ES256、ES384 のみで、none と HS系アルゴリズムは常に拒否されます。結果は IDToken、IDTokenClaims、IDTokenValid に格納されます。
TsgcOIDCJWKS はプロバイダーの署名鍵をキャッシュするスレッドセーフなキャッシュです。未知のキーIDを持つトークンを受け取ると、RefetchInterval の制限内で再ダウンロードが行われるため、鍵のローテーションに再起動は不要です。
sgcOIDC_ValidateIDToken は、REST API や WebSocket サーバーが受け取るベアラートークンを同じJWKSキャッシュに対して検証します。OIDCOptions.AllowedTenants は、マルチテナントの Entra ID アプリを許可する組織だけに制限します。
GetUserInfo はプロフィールのJSONを返します。ループバックリダイレクトサーバー、リフレッシュトークン、DPoP、デバイスコード、失効、イントロスペクションは TsgcHTTP_OAuth2_Client から利用できます。
このコンポーネントが実装する標準規格の公式ソースです。
コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。
| オンラインヘルプ — TsgcHTTP_OIDC_Client このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\26.Authentication\04.OpenID_Connect ディスカバリー、ブラウザサインイン、検証済みクレーム、userinfo、単独の JWT バリデーターを収録しています。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。 | 開く | |
| 技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。 | 開く | |
| ブログ — Delphi でパスキー、SAML SSO、LDAP、TOTP 2FA によるログインを実現する 6つの認証コンポーネントが1つの Delphi アプリケーションでどう連携するかを解説します。 | 開く |