I create an app registration (without api permission as descibed in the MS documentation).
I create a security group and add the app registration as member
I allow service principal to use API Fabric in the PowerBI Admin Portal for this security group.
I allow service principal to access Admin API in readonly in the PowerBI Admin Portal for this security group
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 :
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
Hi everybody,
If I connect with Credential (Client Secret) it works, but not with Certificate :
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.d 10.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.d 8.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.d 20.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.d 2.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.d 3.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.d 10.MoveNext()
Exception : System.Security.Authentication.AuthenticationException
InvocationInfo : {Connect-PowerBIServiceAccount}
Line : Connect-PowerBIServiceAccount -ServicePrincipal -CertificateThumbprint $certificateThumbprint -ApplicationId $clientId
Position : Au caractère Ligne:1 : 1