Fix: Support both HTTP and HTTPS channel credentials
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user