У меня есть. 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?