Аутентификация в Azure Active Directory с помощью. NET Базовые веб-API из Front-End из другого домена - PullRequest
0 голосов
/ 23 марта 2020

У меня есть. NET Core 3.1 Web API, который может проходить аутентификацию в Azure AD. Если пользователь пытается выполнить конечную точку, он перенаправляется на https://login.microsoftonline.com/, а затем он может использовать API.

 public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureAD(options => Configuration.Bind("AzureAd", options));

            services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            {
                options.Authority += "/v2.0/";
                options.TokenValidationParameters.ValidateIssuer = false;
            });

            services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                    builder =>
                    {
                        builder.WithOrigins(Configuration["CorsDomains"].Split(';', tringSplitOptions.RemoveEmptyEntries));
                    });
            });

            services.AddMvc(options =>
                {
                    options.EnableEndpointRouting = false;
                })
                .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
            services.AddSingleton<IOAuthTokenClient, OAuthTokenClient>();
            services.AddSingleton<IAuthenticationProvider, AppAuthenticationProvider>();
        }

        public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseAuthentication();
            app.UseCors(MyAllowSpecificOrigins);
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    "default",
                    "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }

Теперь мы пытаемся подключиться к этому API с помощью JS из РАЗНОГО ДОМЕНА. У меня проблемы с пониманием того, как этот JS должен проходить аутентификацию с этим API (как пользователь в Azure AD). Когда JS вызывает конечную точку, он перенаправляется, но Chrom блокирует его как запрос CORS ...

VM55: 5 Доступ к XMLHttpRequest по адресу https://login.microsoftonline.com/3912a795-6h78-446d-8548-a49ffd73f550/oauth2/v2.0/authorize?client_id=9f58a774-a9dc-4e6b-83cd-8967d3aeb0ec&redirect_uri=https%3A%2F%2Fourapi.azurewebsites.net%2Fsignin-oidc&response_type=id_token&scope=openid%20profile&response_mode=form_post&nonce=637203035634363596.YmIzYTgxNjctMjNhYy00OWE4LWFmYmEtMWRhZTM5MDAzZWQwYjA5MTdiZGMtZGI4OS00YTYwLTliN2EtNThiMWE5MmQ0Njcy&state=CfDJ8JU16Qc5LiRIl-KmHX3n1UK07_IvDsK1bEHExzX3MFzbLibzoctAms4RnZEV9W1G4g45SiKBQFGLiOWjDBUSerYBOPZ2fYloPvNbi2iDwwMdVTlGnTyD6wQpujGOxZx3VmpSlDaxokrmxLnQfomPapUFm6YFRBBM8G9zBu-Nd8_No2rjK1hhThHGcYWNKudJhzaWLqv23fcrn1JdZA1YmUl1Sj2Q6ZTq_gtzJjWmzHDmqzitqTKg0hqsXXZJ6LpyDMto89A0Qhg7akGix-xgXPKGXmTBZ_nmp3DceHTK94YDqBCe9AlDVUjp1OW0WfNiLN1ILve7K1mvPN1w2zPThgurMRzMkQ4TkC0Yzfi5QodGjWFN6FBeeF6YMpbn9YM-WjMgWRZyjAGQ9syW22bbvv5sEEMuNcW2AB6iMn4jV9hZ2u7tiAKM9lN6-MlZDrPdoGeexgR7uAmvJMcBhlam7LP_RbgJLp2FaPLNmKioYDjxV65fSX3ApZDLeB-dZfx34Q&x-client-SKU=ID_NETSTANDARD2_0&x-client-ver=5.5.0.0 '(перенаправлен из 'https://ourapi.azurewebsites.net/api/Users/jan.kowalski@ourdomain.com / Календарь / События? StartDate = 2020-03-20T00: 00: 00Z & endDate = 2020-03-21T00: 00: 00Z ') из источника 'http://localhost: 8181 'был заблокирован политикой CORS: на запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '.

Мы можем разрешить выдачу токенов доступа в разделе Аутентификация в Azure Portal и благодаря этому JS сможет получить токен доступа самостоятельно, но я не знаю, является ли это правильным способом сделать это. Может быть, можно как-то аутентифицироваться в Azure AD, вызвав наш API?

...