尝试使用protobuf-net与gRPC-Web进行Azure AD身份验证

问题描述

我正在尝试使用炽烈的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正确使用两者?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)