A partir do sgcWebSockets 4.4.5, o protocolo OAuth2 é suportado nos componentes de servidor.
O OAuth2 permite que aplicações de terceiros recebam acesso limitado a um serviço HTTP, seja em nome de um proprietário de recurso ou permitindo que uma aplicação de terceiros obtenha acesso por conta própria. Graças ao OAuth2, provedores de serviço e aplicações consumidoras podem interagir de forma segura.
TsgcHTTP_OAuth2_Server
Este componente fornece a implementação do protocolo OAuth2 nos componentes de lado servidor.
Os componentes de servidor têm uma propriedade chamada Authorization.OAuth.OAuth2 onde você pode atribuir uma instância de TsgcHTTP_OAuth2_Server. Se a autenticação estiver habilitada e a propriedade OAuth2 estiver vinculada ao componente OAuth2 Server, as requisições WebSocket e HTTP exigirão um Bearer Token para serem processadas; caso contrário, a conexão será encerrada automaticamente.
Exemplo simples
Vamos criar um exemplo simples de servidor OAuth2 usando um TsgcWebSocketHTTPServer.
Primeiro, crie um novo TsgcWebSocketHTTPServer escutando na porta 443 e usando um certificado autoassinado no arquivo 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;
Em seguida, crie uma nova instância de TsgcHTTP_OAuth2_Server e atribua ao servidor criado anteriormente.
Registre uma nova aplicação com os seguintes valores:
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;
Em seguida, trate o evento OnOAuth2Authentication do componente OAuth2 Server e implemente seu próprio método para autenticar usuários. Usaremos o par "user/secret" para aceitar um login.
procedure OnAuth2Authentication(Connection: TsgcWSConnection; OAuth2: TsgcHTTPOAuth2Request; aUser, aPassword: string; var Authenticated: Boolean);
begin
if ((aUser = 'user') and (aPassword = 'secret')) then
Authenticated := True;
end;
Por fim, inicie o servidor e use um cliente OAuth2 para fazer login. Por exemplo, você pode usar o TsgcHTTP_OAuth2_Client incluído na biblioteca sgcWebSockets.

Solicite um novo token de acesso: uma nova sessão do navegador será exibida e o usuário deverá permitir a conexão e fazer login.

Se o login for bem-sucedido, um novo token será retornado ao cliente. Todas as requisições subsequentes devem incluir esse bearer token nos cabeçalhos HTTP.

