-
Notifications
You must be signed in to change notification settings - Fork 108
Description
Describe the bug
When the signalr connection string says AuthType=aad and nothing else related to auth, it should use DefaultAzureCredential. This credential automatically figures out a lot of stuff and can be configured through environment variables etc.. It automatically works locally or in a managed identity context. It is the default for all other Azure services.
Somehow Azure SignalR tries to determine for itself which credential type it should use, which is not the expected behavior given all the other Azure SDKs (e.g. storage, service bus, sql, etc).
To Reproduce
Given this snippet:
var mgr = new ServiceManagerBuilder()
.WithOptions(o =>
{
o.ConnectionString = "Endpoint=https://example.service.signalr.net;AuthType=aad;Version=1.0;";
})
.BuildServiceManager();
I expect the service manager to use DefaultAzureCredential when generating tokens to authenticate with the service. It currently appears to use ManagedIdentityCredential which only works in a managed identity context.
Exceptions (if any)
AzureSignalRAccessTokenNotAuthorizedException: The given AzureAD identity don't have the permission to generate access token.
at Microsoft.Azure.SignalR.AadAccessKey.<GenerateAccessTokenAsync>d__23.MoveNext()
While the identity used by DefaultAzureCredential is SignalR Service Owner. The same code does not throw in a managed identity context.
Further technical details
Microsoft.Azure.SignalR.Managementv1.17.0