Sto costruendo un API utilizzando asp.net 5 rc2. Sto cercando di implementare openiddict-core, trovato here per gli account locali e voglio anche consentire agli utenti di utilizzare login esterni, come google.Nessun gestore di autenticazione è configurato per l'autenticazione per lo schema: Microsoft.AspNet.Identity.External
ho installato il tutto, ma quando provo a implementare l'autenticazione di Google, e io chiamo questo codice
var info = await _signInManager.GetExternalLoginInfoAsync();
ricevo il messaggio di errore nel titolo.
Sul client che sto utilizzando Satellizer ha trovato here, che si occupa di aprire la finestra del prompt di google e di inviare il callback al mio metodo Google AuthController, che è il normale codice ChallengeResult che si vede in altri esempi di mvc6.
Ho scritto il codice per ottenere i dettagli utenti manualmente e che funziona, ma ho pensato di utilizzare il signInManager già costruito, invece, piuttosto che riprodurre la ruota ...
io non ho impostare le cose in modo corretto , dato che tutti gli esempi sembrano utilizzare i cookie, il che credo sia dovuto al fatto che si tratta di applicazioni Web mvc6, non di API. Non voglio usare i cookie, ma questo potrebbe essere il mio problema.
Ora per un po 'di codice.
startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add MVC services to the services container.
services.AddMvc();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(_configuration["Data:DefaultConnection:ConnectionString"]));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders()
.AddOpenIddict(); // Add the OpenIddict services after registering the Identity services.
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// use jwt bearer authentication
app.UseJwtBearerAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.RequireHttpsMetadata = false;
options.Audience = "http://localhost:5000/";
options.Authority = "http://localhost:5000/";
});
// Add all the external providers you need before registering OpenIddict:
app.UseGoogleAuthentication(options =>
{
options.AutomaticAuthenticate = true;
//options.AutomaticChallenge = true;
options.ClientId = "XXX";
options.ClientSecret = "XXX";
});
//app.UseFacebookAuthentication();
app.UseOpenIddict();
// Enable all static file middleware
app.UseStaticFiles();
// Enable Mvc for view controller, and
// default all routes to the Home controller
app.UseMvc(options =>
{
options.MapRoute(
name: "default",
template: "{*url}",
defaults: new { controller = "Home", action = "Index" });
});
}
AuthController.cs
public class AuthController : Controller
{
private UserManager<ApplicationUser> _userManager;
private SignInManager<ApplicationUser> _signInManager;
private ApplicationDbContext _applicationDbContext;
public AuthController(
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager,
ApplicationDbContext applicationDbContext)
{
_userManager = userManager;
_signInManager = signInManager;
_applicationDbContext = applicationDbContext;
}
[HttpPost("google")]
public async Task<IActionResult> GoogleAsync([FromBody] ExternalLoginModel model)
{
// THIS IS WHERE ERROR OCCURS
var info = await _signInManager.GetExternalLoginInfoAsync();
return Ok();
}
}
ExternalLoginModel.cs
public class ExternalLoginModel
{
public string Code { get; set; }
public string ClientId { get; set; }
public string RedirectUri { get; set; }
}
Possibile duplicato di [Nessun gestore di autenticazione è configurato per gestire lo schema: Automatico] (https://stackoverflow.com/questions/33825058/no-authentication-handler-is-configured-to-handle-the-scheme- automatico) –