Alcuni di voi potrebbero aver bisogno di gestire la visualizzazione dell’interfaccia di connessione durante una connessione OAuth 2.0 per motivi tecnici o di progettazione. A partire da 4D 20 R6, è possibile scegliere di non aprire automaticamente un browser web per visualizzare l’interfaccia di connessione, ma di utilizzare l’authenticateURI per visualizzarla dove si desidera.
In questo post del blog, illustreremo un esempio di apertura dell’interfaccia di accesso Microsoft all’interno di un’area web.
HDI Netkit BrowserAutoOpen false
Esempio
Nell’esempio che segue, vedremo come aprire l’interfaccia di login di Microsoft in un’area Web. A tale scopo, è necessario creare un modulo con un’area Web chiamata “WAConnection”.
Per prima cosa, creiamo un metodo OAuth2GetToken per gestire la visualizzazione dell’interfaccia di connessione nell’area web e attendere la ricezione del token. Poiché questo metodo sarà chiamato in un worker, usiamo il comando CALL FORM per visualizzare le informazioni nel form corrente:
#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())
Quindi è necessario chiamare questo metodo in un worker con l’attributo browserAutoOpen con l’attributo false nei parametri della credenziale:
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)
Quindi, se si apre il modulo e si esegue il codice precedente, l’interfaccia di connessione verrà visualizzata nell’area web e il server web 4D attenderà il token:
Conclusione
Utilizzando questa funzione, gli sviluppatori possono evitare l’apertura automatica del browser web e ottenere il controllo sulla presentazione dell’interfaccia di connessione. Questa flessibilità consente di ottenere un’esperienza utente più integrata e adatta alle esigenze specifiche dell’applicazione.