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); | |
} | |
} |
Exemplo de utilização do endpoint de tokens: https://codepen.io/azuremaps/pen/BapjZVY