Fix: Support both HTTP and HTTPS channel credentials

This commit is contained in:
masoodafar-web
2025-12-07 17:04:02 +03:30
parent 17f8346a87
commit 419bcbdf7a

View File

@@ -132,27 +132,28 @@ public static class ConfigureServices
var credentials = CallCredentials.FromInterceptor(async (context, metadata) => var credentials = CallCredentials.FromInterceptor(async (context, metadata) =>
{ {
var provider = serviceProvider.GetRequiredService<ITokenProvider>(); var provider = serviceProvider.GetRequiredService<ITokenProvider>();
// var accessToken = await provider.RequestAccessToken();
// accessToken.TryGetToken(out var token);
var token = await provider.GetTokenAsync(); var token = await provider.GetTokenAsync();
if (!string.IsNullOrEmpty(token)) if (!string.IsNullOrEmpty(token))
{ {
// Console.WriteLine($"Authorization Bearer {token.Value}");
metadata.Add("Authorization", $"Bearer {token}"); metadata.Add("Authorization", $"Bearer {token}");
} }
await Task.CompletedTask; await Task.CompletedTask;
}); });
// SslCredentials is used here because this channel is using TLS. // تشخیص HTTP یا HTTPS
// CallCredentials can't be used with ChannelCredentials.Insecure on non-TLS channels. var isHttps = address.StartsWith("https://", StringComparison.OrdinalIgnoreCase);
var channelCredentials = isHttps
? ChannelCredentials.Create(new SslCredentials(), credentials)
: ChannelCredentials.Create(ChannelCredentials.Insecure, credentials);
var channel = GrpcChannel.ForAddress(address, new GrpcChannelOptions var channel = GrpcChannel.ForAddress(address, new GrpcChannelOptions
{ {
UnsafeUseInsecureChannelCallCredentials = true, UnsafeUseInsecureChannelCallCredentials = !isHttps, // فقط برای HTTP
Credentials = ChannelCredentials.Create(new SslCredentials(), credentials), Credentials = channelCredentials,
HttpClient = httpClient, HttpClient = httpClient,
MaxReceiveMessageSize = 1000 * 1024 * 1024, // 1 GB MaxReceiveMessageSize = 1000 * 1024 * 1024,
MaxSendMessageSize = 1000 * 1024 * 1024 // 1 GB MaxSendMessageSize = 1000 * 1024 * 1024
}); });
return channel.Intercept(new ErrorHandlerInterceptor()); return channel.Intercept(new ErrorHandlerInterceptor());
} }