microsoft / powerbi-powershell

PowerShell community for Microsoft PowerBI. Here you will find resources and source for PowerShell modules targeting PowerBI.
MIT License
349 stars 121 forks source link

Connect-PowerBIServiceAccount : Can't connect with Certificate but works with ClientSecret #411

Open jolscr opened 2 months ago

jolscr commented 2 months ago

Hi everybody,

  1. I create an app registration (without api permission as descibed in the MS documentation).
  2. I create a security group and add the app registration as member
  3. I allow service principal to use API Fabric in the PowerBI Admin Portal for this security group.
  4. I allow service principal to access Admin API in readonly in the PowerBI Admin Portal for this security group
  5. I also allow improve answers for metadata and DAX espression in the PowerBI Admin Portal for this security group

If I connect with Credential (Client Secret) it works, but not with Certificate :

image

Here is the output trace with Resolve-PowerBIError :

Message : Error Acquiring Token: MSAL.Desktop.4.27.0.0.MsalServiceException: ErrorCode: unauthorized_client Microsoft.Identity.Client.MsalServiceException: AADSTS700016: Application with identifier 'xxxxxxxxxxxxxxxxxxxxxxx' was not found in the directory 'Microsoft Services'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant. Trace ID: xxxxxxxxxxxxxxxxxxxxxxxx Correlation ID: xxxxxxxxxxxxxxxxxxxxxxxxxx Timestamp: 2024-09-18 09:44:17Z à Microsoft.Identity.Client.OAuth2.OAuth2Client.ThrowServerException(HttpResponse response, RequestContext requestContext) à Microsoft.Identity.Client.OAuth2.OAuth2Client.CreateResponse[T](HttpResponse response, RequestContext requestContext) à Microsoft.Identity.Client.OAuth2.OAuth2Client.d11`1.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.Identity.Client.OAuth2.OAuth2Client.d10.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.Identity.Client.OAuth2.TokenClient.d8.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à Microsoft.Identity.Client.OAuth2.TokenClient.d8.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.Identity.Client.OAuth2.TokenClient.d5.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.Identity.Client.Internal.Requests.RequestBase.d20.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.d3.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.d2.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.Identity.Client.Internal.Requests.RequestBase.d13.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.Identity.Client.ApiConfig.Executors.ConfidentialClientExecutor.d3.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.PowerBI.Common.Authentication.ServicePrincipalAuthenticationFactory.d__3.MoveNext() StatusCode: 400 ResponseBody: {"error":"unauthorized_client","error_description":"AADSTS700016: Application with identifier 'xxxxxxxxxxxxxxxxxxxxxxxxx' was not found in the directory 'Microsoft Services'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant. Trace ID: xxxxxxxxxxxxxxxxxxx Correlation ID: xxxxxxxxxxxxxxxxxxxxxx Timestamp: 2024-09-18 09:44:17Z","error_codes":[700016],"timestamp":"2024-09-18 09:44:17Z","trace_id":"xxxxxxxxxxxxxxxxxxxxxx","correlation_id":"xxxxxxxxxxxxxxxxxxxx","error_uri":"https://login.microsoftonline.com/error?code=700016"} Headers: Pragma: no-cache Strict-Transport-Security: max-age=31536000; includeSubDomains X-Content-Type-Options: nosniff client-request-id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x-ms-request-id: xxxxxxxxxxxxxxxxxxxxxxx x-ms-ests-server: 2.1.18947.4 - WEULR1 ProdSlices x-ms-clitelem: 1,700016,0,, x-ms-srs: 1.P X-XSS-Protection: 0 Cache-Control: no-store, no-cache P3P: CP="DSP CUR OTPi IND OTRi ONL FIN" Set-Cookie: fpc=xxxxxxxxxxxxxxxxxxx; expires=Fri, 18-Oct-2024 09:44:17 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; path=/; secure; httponly Date: Wed, 18 Sep 2024 09:44:17 GMT

StackTrace : à Microsoft.PowerBI.Common.Authentication.ServicePrincipalAuthenticationFactory.d3.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) à Microsoft.PowerBI.Commands.Common.AuthenticationFactorySelector.d10.MoveNext() Exception : System.Security.Authentication.AuthenticationException InvocationInfo : {Connect-PowerBIServiceAccount} Line : Connect-PowerBIServiceAccount -ServicePrincipal -CertificateThumbprint $certificateThumbprint -ApplicationId $clientId Position : Au caractère Ligne:1 : 1