如何删除asp.net身份管理数据库表?

时间:2017-09-23 23:23:45

标签: asp.net-core identityserver4

在我的asp.net核心应用程序中,用户需要使用Google OAuth登录。使用VS2017生成的代码并启用Google身份验证,此部分工作正常。

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

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

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

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

我猜我需要摆脱第二行。这是对的吗?

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

1 个答案:

答案 0 :(得分:0)

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

这是我从文档中获得的内容。我没试过这个。如果您对此有疑问,请告诉我。

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

app.UseAuthentication();

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

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的实例