Skip to content

Instantly share code, notes, and snippets.

@weltonrodrigo
Last active May 12, 2022 13:32
Show Gist options
  • Save weltonrodrigo/49e0386ff3669d92a8b0de9e60748c0e to your computer and use it in GitHub Desktop.
Save weltonrodrigo/49e0386ff3669d92a8b0de9e60748c0e to your computer and use it in GitHub Desktop.
Exemplo de Controller springboot para obter no backend um token do azure maps a ser usado na aplicação javascript.

Necessário fazer o controle de CORS. Esse endpoint no backend deve ser protegido pela aplicação, para ser usado apenas por usuários com permissões adequadas.

O token obtido tem validade de 2 horas.

package br.org.prf.azuremapsexample.controllers;
import com.azure.core.credential.AccessToken;
import com.azure.core.credential.TokenRequestContext;
import com.azure.identity.DefaultAzureCredentialBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class AzureMapTokenController {
@GetMapping("/aztoken")
public Mono<String> aztoken(){
// 'com.azure.spring:azure-spring-boot-starter' e 'com.azure:azure-identity'
// Vai procurar uma credencial, seja do usuário logado atualmente na linha de comando `az login`
// Seja usando o serivço de credenciais se tiver rodando dentro da azure (Managed Identity)
// Seja usando as variáveis de ambiente AZURE_TENANT_ID, AZURE_CLIENT_ID e AZURE_CLIENT_SECRET
var credential = new DefaultAzureCredentialBuilder().build();
var context = new TokenRequestContext().addScopes("https://atlas.microsoft.com/.default");
var accessToken = credential.getToken(context);
// A função de autenticação do maps skd espera somente o token e em texto plano.
// return accessToken.map(tokenEnvelope -> tokenEnvelope.getToken());
return accessToken.map(AccessToken::getToken);
}
}
@weltonrodrigo
Copy link
Author

Um exemplo de um container pronto pra fazer essa obtenção do token:
https://github.com/weltonrodrigo/azure-token-helper/blob/main/README.md

Mas nesse caso, a única "proteção" é o CORS, não a sessão do usuário.

@weltonrodrigo
Copy link
Author

Exemplo de utilização do endpoint de tokens: https://codepen.io/azuremaps/pen/BapjZVY

//Initialize a map instance.
var map = new atlas.Map('map', {
  center: [-73.985708, 40.75773],
  zoom: 9,
  view: "Auto",
  //Add your Azure Maps subscription client ID to the map SDK.
  authOptions: {
    authType: "aad",
    clientId: "04ec075f-3827-4aed-9975-d56301a2d663", //Your Azure Maps account Client ID is required to access your Azure Maps account.

    getToken: function (resolve, reject, map) {
      //URL to your authentication service that retrieves an Azure Active Directory Token.
      var tokenServiceUrl = "https://azuremapscodesamples.azurewebsites.net/Common/TokenService.ashx";

      fetch(tokenServiceUrl).then(r => r.text()).then(token => resolve(token));
    }
  }
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment