Ошибка разрешения доступа к веб-узлу Blazor и API Google

#c# #google-drive-api #cors #google-api-dotnet-client #blazor-webassembly

Вопрос:

Я создал проект веб-сборки Blazor:

введите описание изображения здесь

В своей консоли Google я создал новый проект веб-приложения, в котором указал Авторизованный источник Javascript и авторизованные URI перенаправления, как показано ниже

2

В моем проекте Blazor я добавил следующие пакеты:
Google.Api.Auth.AspNetCore3
Google.Api.Привод.v3

Мой стартап.cs

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddRazorPages();
            ***services
                .AddAuthentication(o =>
                {
                    o.DefaultChallengeScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;
                    o.DefaultForbidScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;
                    o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                })
                .AddCookie()
                .AddGoogleOpenIdConnect(options =>
                {
                    options.ClientId = "{--myclientid--}";
                    options.ClientSecret = {"--myclientsecret--}";
                });***
        }
 

а также

   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseWebAssemblyDebugging();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseBlazorFrameworkFiles();
            app.UseStaticFiles();
          
            app.UseRouting();

            ***app.UseAuthentication();
            app.UseAuthorization();***


            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapControllers();
                endpoints.MapFallbackToFile("index.html");
            });
        }
 

Я свой WeatherforcastController я добавил этот метод:

   [HttpGet("DriveFileList")]
        [GoogleScopedAuthorize(DriveService.ScopeConstants.DriveReadonly)]
        public async Task<List<String>> DriveFileList([FromServices] IGoogleAuthProvider auth)
        {
            GoogleCredential cred = await auth.GetCredentialAsync();
            var service = new DriveService(new BaseClientService.Initializer
            {
                HttpClientInitializer = cred
            });
            var files = await service.Files.List().ExecuteAsync();
            var fileNames = files.Files.Select(x => x.Name).ToList();
            return fileNames;
        }
 

Я вызываю вышеуказанный метод со своей страницы fetchData.razor, как показано ниже:

 protected override async Task OnInitializedAsync()
{    
     List<String> myFiles = await Http.GetFromJsonAsync<List<String>>("WeatherForecast/DriveFileList");   
}
 

Я бегу и получаю ошибку CORS:
3

Есть ли обходной путь? Существуют ли другие подходы для доступа к Api Google из веб-сборки Blazor?

Комментарии:

1. Вы намерены сделать это с помощью Blazor на стороне клиента или на стороне сервера?

2. Спасибо. Я надеялся, что это можно сделать на стороне клиента, возможно ли это?

3. Да, но я уверен, что вам нужно будет использовать Google.apis.js клиентская библиотека, а не клиентская библиотека Google .net. Я сделал это еще тогда, когда блейзор только что вышел, работал как заклинание, но я не уверен, что у меня есть какой-либо образец кода, плавающий вокруг.

4. Спасибо, я расследую «Google.apis.js» путь вперед

5. Я еще немного покопался для тебя. #1427 Blazor не поддерживается ни в каком формате клиентской библиотекой Google .net, и команда решила, что это не является приоритетом. #1830