OAuth2 | 服务器示例

让我们使用 TsgcWebSocketHTTPServer 做一个简单的 OAuth2 服务器示例。

 

首先,创建一个新的 TsgcWebSocketHTTPServer,监听 443 端口,并使用 sgc.pem 文件中的自签名证书。


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 头中包含此 Bearer 令牌。