我正在尝试在 blazor webassembly 应用程序中使用 gRPC-Web 进行 Azure AD 身份验证。我正在使用 protobuf-net 来帮助我进行序列化。我不确定如何传递令牌以让服务器端识别它。这就是我所拥有的:
var headers = new Metadata
{
{ "Authorization", $"Bearer {Token}" }
};
并且,我将其作为参数发送到我想要使用的方法中
var result = await Client.CreateCustomer(this.customer, headers);
这是注入服务的方式:
builder.Services.AddTransient(services =>
{
var httpClient = new HttpClient(new GrpcWebHandler(GrpcWebMode.GrpcWeb, new HttpClientHandler()));
var channel = Grpc.Net.Client.GrpcChannel.ForAddress("****", new GrpcChannelOptions { HttpClient = httpClient });
return channel.CreateGrpcService<Application.Services.ICustomerService<ServerCallContext>>();
});
这是服务的发布方式:
endpoints.MapGrpcService<CustomerService>().RequireAuthorization().EnableGrpcWeb()
而且,这是实现:
public class CustomerService : ICustomerService<ServerCallContext>
{
[Authorize]
public async ValueTask<Customer> CreateCustomer(Customer customerDTO, ServerCallContext context)
{****}
}
我得到的错误是无法从“Grpc.Core.Metadata”转换为“Grpc.Core.ServerCallContext”,这很明显。
我发现的参考使用了元数据,但我应该使用的是 ServerCallContext https://docs.microsoft.com/en-us/dotnet/architecture/grpc-for-wcf-developers/metadata 所以我错过了什么,我做错了什么,如何使用 protobuf-net 正确使用两者?