Я успешно добавил контроллер webapi и проект MVC4.Я могу позвонить и вернуть данные.Затем я добавил атрибут [Authorize] к контроллеру, чтобы защитить его.
Он работает с аутентификацией cookie, но не аутентификацией токена на предъявителя.Странно, но контроллеры MVC работают с обоими.Вот что у меня в стартапе, я регистрирую оба.
using (IDependencyScope scope = GlobalConfiguration.Configuration.DependencyResolver.BeginScope())
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
CookieName = "mycookie.myname",
CookieHttpOnly = false
});
IOpenIdSettingProvider openIdSettingProvider = scope.GetService<IOpenIdSettingProvider>();
OpenIdConnectAuthenticationDefinition openIdConnectAuthenticationDefinition = openIdSettingProvider.Resolve().FirstOrDefault();
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
AllowedAudiences = new List<string>
{
openIdConnectAuthenticationDefinition.Audience
},
AuthenticationMode = AuthenticationMode.Active,
IssuerSecurityTokenProviders = new List<IIssuerSecurityTokenProvider>
{
new StaticSecurityTokenProvider(openIdConnectAuthenticationDefinition.Issuer, openIdConnectAuthenticationDefinition.SigningTokens)
}
});
IConfigurationSource configurationSource = scope.GetService<IConfigurationSource>();
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = configurationSource.GetSetting("ClientId"),
Authority = configurationSource.GetSetting("BaseAuthorityUri"),
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = context =>
{
context.ProtocolMessage.Prompt = "login";
context.ProtocolMessage.RedirectUri = context.Request.Uri.ToString();
return Task.CompletedTask;
}
}
});
}
}