2017-09-23 91 views
0

在我的asp.net核心应用程序中,用户需要使用Google OAuth登录。使用VS2017生成的代码并启用Google身份验证,此部分工作正常。如何删除asp.net身份管理数据库表?

我遇到的问题是,默认情况下,应用程序会创建一堆与asp.net用户和角色相关的数据库表。我真的不需要在这些表格中保存任何信息。我只关心电子邮件和名称,并通过OAuth获取这两个值。

如何完全禁用ASP.NET自己的身份管理?

默认生成的代码定义AccountController类的方法ExternalLoginCallback。相关的行是:

var info = await _signInManager.GetExternalLoginInfoAsync(); 
var result = await _signInManager.ExternalLoginSignInAysnc(...); 
return RedirectToLocal(returnUrl); 

我猜我需要摆脱第二行。它是否正确?

最后,我仍然需要一个ApplicationUser的实例,我应该可以从代码的任何部分访问它。我将它存储在会话对象中还是有更好的方法?问候。

回答

0

如果你不需要这些表,你可能不应该使用ASP.NET Core Identity。相反,您可以使用独立的Cookie身份验证,它可以将用户的电子邮件和名称保存在Cookie中。阅读doc了解更多详情。

这是我从文档中获得的东西。我没有试过这个。如果你在这方面遇到麻烦,请告诉我。

调用UseAuthentication方法在Startup.cs文件的配置方法:

app.UseAuthentication(); 

调用在Startup.cs文件的ConfigureServices方法AddXxx方法:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) 
    .AddCookie(options => { 
     options.AccessDeniedPath = "/Account/Forbidden/"; 
     options.LoginPath = "/Account/Unauthorized/"; 
    }) 
    .AddGoogle(googleOptions =>{ 
     googleOptions.ClientId = Configuration["Authentication:Google:ClientId"]; 
     googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"]; 
    }); 

Here是另一个工作实施例中。用户登录

后,你总是可以得到从HttpContext.User.Claims用户的信息,而不用ApplicationUser

+0

实例非常感谢您的帮助。但是,它看起来像是在调用_signInManager.GetExternalLoginAsync和_signInManager,ExternalLoginSignInAsync之间需要的东西。否则,第二次呼叫失败。以前,中间有两个调用 - _userManager.CreateAsync和_userManager.AddLoginAsync。问候。 – Peter

+0

@Peter如果您使用独立Cookie身份验证,则不应使用signInManager或userManager,因为它们是ASP.NET Core Identity的一部分。你可以参考[这个项目](https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers/tree/experimental/samples/Mvc.Client)来了解如何获得所需的信息。 –

+0

谢谢你的帮助。我们的要求是,用户必须使用Google oAuth进行身份验证。有没有更简单的方法来运行oAuth而不使用siginManager调用?谢谢。 – Peter