Alguns de vocês podem precisar gerenciar a exibição da interface de conexão durante uma conexão OAuth 2.0 por razões técnicas ou de design. A partir de 4D 20 R6, pode escolher não abrir automaticamente um navegador web para mostrar a interface de conexão, mas usar o authenticateURI para mostrá-la onde quiser.
Nesse post de blog, vamos mostrar um exemplo de abertura da interface de login Microsoft dentro de uma área web.
HDI Netkit BrowserAutoOpen false
Exemplo
No exemplo abaixo, veremos como abrir a interface de login da Microsoft em uma área da Web. Para tal, é necessário criar um formulário com uma área Web denominada “WAConnection”
Primeiro, vamos criar um método OAuth2GetToken para gerir a apresentação da interface de ligação na área Web e aguardar que o token seja recebido. Como este método será chamado num trabalhador, utilizamos o comando CALL FORM para mostrar a informação no formulário atual:
#DECLARE($credential : Object; $CurrentWindows : Integer)
var $OAuth2:=cs.NetKit.OAuth2Provider.new($credential)
// Display the connection page in the web area "WAConnection"
CALL FORM($CurrentWindows; Formula(WA OPEN URL(*; "WAConnection"; $1)); $OAuth2.authenticateURI)
// Wait for the token and save it in the Form.token attribute
CALL FORM($CurrentWindows; Formula(Form.token:=$1); $OAuth2.getToken())
Em seguida, é necessário chamar este método num trabalhador com o atributo browserAutoOpen com o atributo false nos parâmetros da credencial:
var $credential:={}
$credential.name:="Microsoft"
$credential.permission:="signedIn"
$credential.clientId:="7008ebf5-xxx"
$credential.redirectURI:="http://127.0.0.1:50993/authorize/"
$credential.scope:="https://graph.microsoft.com/.default"
$credential.accessType:="offline"
$credential.prompt:="select_account"
// The display of the connection interface is managed by the developer.
// The browser is not automatically opened
$credential.browserAutoOpen:=False
// Call of the OAuth2GetToken method
CALL WORKER("OAuth2Worker"; Formula(OAuth2GetToken($1; $2)); $credential; Current form window)
Então, se abrir seu formulário e executar o código acima, a interface de conexão será exibida na sua área web, e o servidor web 4D vai esperar pelo token:
Conclusão
Usando essa funcionalidade, desenvolvedores podem ignorar a abertura automática do navegador web e ganhar controle sobre a apresentação da interface de conexão. Essa flexibilidade permite uma experiência de usuário mais integrada e adaptada às necessidades específicas de sua aplicação.