У меня есть приложение MVC dot Net Core 2.0. Приложение проверяет подлинность на IdentityServer4 с использованием гибридного гранта, поэтому у меня есть:
services.AddAuthentication(o =>
{
o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{......
и это прекрасно работает.
У меня также есть клиент JavaScript, который аутентифицируется по тому же IDP, используя неявное предоставление, и который также отлично работает. Я хотел разрешить клиенту javascript, вызывающему API (контроллер внутри приложения MVC), передавать токен-носитель. Если этот API имеет атрибут авторизации, я получаю: Не удалось загрузить http://localhost:4444/testidentity: На запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. Origin 'http://localhost:5003 У меня есть CORS, и вызов работает, если мне не требуется авторизация на уровень контроллера API.
Я могу легко перенести API в отдельный проект и иметь в API что-то вроде:
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{.......
Это сработает, но я хотел бы, чтобы он работал в приложении MVC и, по-видимому, не хватало какой-то конфигурации промежуточного программного обеспечения.