OAuth 2.0 提供商
在 Delphi 中搭建您自己的 OAuth 2.0 授权服务器。提供带 PKCE、签名 JWT 访问令牌和可插拔存储的授权、令牌、刷新和撤销端点。
在 Delphi 中搭建您自己的 OAuth 2.0 授权服务器。提供带 PKCE、签名 JWT 访问令牌和可插拔存储的授权、令牌、刷新和撤销端点。
完整的 OAuth 2.0 授权服务器实现:注册客户端、颁发授权码、兑换为访问令牌和刷新令牌、签发 JWT,并支持 PKCE、刷新令牌轮换和撤销。
TsgcHTTP_OAuth2_Server_Provider
Windows, macOS, Linux, iOS, Android
Enterprise
放置 TsgcHTTP_OAuth2_Server_Provider,注册 client_ids 和 redirect_uris,附加到 TsgcWebSocketHTTPServer — 标准端点(/authorize、/token、/revoke)即可使用。
uses
sgcWebSocket, sgcHTTP;
var
Server: TsgcWebSocketHTTPServer;
Provider: TsgcHTTP_OAuth2_Server_Provider;
begin
Provider := TsgcHTTP_OAuth2_Server_Provider.Create(nil);
Provider.ProviderOptions.AuthorizationEndpoint := '/oauth/authorize';
Provider.ProviderOptions.TokenEndpoint := '/oauth/token';
Provider.ProviderOptions.RevocationEndpoint := '/oauth/revoke';
Provider.ProviderOptions.PKCE.Required := True;
Provider.OnAuthorizeRequest := procedure(Sender: TObject;
const aRequest: TsgcOAuth2_AuthorizeRequest;
var aResponse: TsgcOAuth2_AuthorizeResponse)
begin
// 验证用户会话,颁发或拒绝授权码
aResponse.Code := GenerateAuthCode(aRequest.ClientId, aRequest.UserId);
end;
Server := TsgcWebSocketHTTPServer.Create(nil);
Server.Port := 8443;
Server.SSL := True;
Server.OAuth2.Provider := Provider;
Server.Active := True;
end;
// uses: sgcWebSocket, sgcHTTP
TsgcHTTP_OAuth2_Server_Provider *Provider = new TsgcHTTP_OAuth2_Server_Provider(this);
Provider->ProviderOptions->AuthorizationEndpoint = "/oauth/authorize";
Provider->ProviderOptions->TokenEndpoint = "/oauth/token";
TsgcWebSocketHTTPServer *Server = new TsgcWebSocketHTTPServer(this);
Server->OAuth2->Provider = Provider;
Server->Active = true;
自托管授权服务器 — 从 /authorize 到刷新令牌轮换,一个 Delphi 组件全部搞定。
处理 GET /authorize 请求,验证 response_type、client_id 和 redirect_uri,然后触发 OnAuthorizeRequest 供您的用户会话登录界面使用。
POST /token 为 authorization_code、refresh_token 和 client_credentials 许可颁发访问令牌和刷新令牌。按 RFC 7636 验证 PKCE code_verifier。
可选颁发自包含的 JWT 访问令牌(HS 或 RS/ES),使资源服务器无需内省往返即可验证。
启用 ProviderOptions.RefreshToken.Rotation 后,每次刷新都会颁发新的刷新令牌并使前一个失效 — 符合 OAuth 2.1 最佳实践。
POST /revoke 按 RFC 7009 使访问令牌或刷新令牌失效 — 支持 Bearer 和 client_credentials 撤销。
OnLookupClient、OnPersistAuthCode、OnPersistRefreshToken 等事件允许使用 FireDAC、SQLite、Redis 或您自己的数据访问层为提供商提供存储后端。
本组件所实现标准的权威来源。