Eu tenho um script bash que usa curl e a API do Microsoft Graph para conseguir o que desejo. Mas não consigo traduzir esse script em código Kotlin com o MS Java Graph Api SDK.
O script de trabalho é:
export CLIENT_ID='XXX'
export CLIENT_SECRET='XXX'
export TENANT_ID='XXX'
exoprt SCOPE='api://ourApp/2023/CustomScope'
export TOKEN=`curl \
-d grant_type=client_credentials \
-d client_id=$CLIENT_ID \
-d client_secret=$CLIENT_SECRET \
-d scope=$SCOPE \
-d resource=https://graph.microsoft.com \
https://login.microsoftonline.com/$TENANT_ID/oauth2/token \
| jq -j .access_token`
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
https://graph.microsoft.com/v1.0/servicePrincipals/XXX/appRoleAssignedTo \
| jq .
Recebo uma lista de atribuições de funções para meu aplicativo. (A API com permissões corretas é exposta nesse escopo)
Agora estou tentando recriar isso em Kotlin usando os documentos: https://learn.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=csharp#client-credentials-provider
val clientSecretCredential = ClientSecretCredentialBuilder()
.clientId(appId)
.clientSecret(secret)
.tenantId(tenantId)
.build()
client = GraphServiceClient(
clientSecretCredential,
"api://ourApp/2023/CustomScope"
)
val result = client.servicePrincipals().byServicePrincipalId(appObjectId).get().appRoleAssignedTo
Se eu disparar a solicitação com este cliente, recebo o erro
com.microsoft.aad.msal4j.MsalServiceException: AADSTS1002012: The provided value for scope api://drupalwiki/2023/SyncEverything openid profile offline_access is not valid. Client credential flows must have a scope value with /.default suffixed to the resource identifier (application ID URI)
Se eu usar "https://graph.microsoft.com/.default" como escopo, recebo apenas uma lista vazia. Também não consigo renomear nosso escopo para, por exemplo, "api://ourApp/2023/.default" no final porque a UI do Azure diz que esse nome é inválido. Além disso, como o script bash funciona, gostaria apenas de inicializar o cliente da mesma forma, isso é possível?
Felicidades e obrigado!