在我的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
的实例,我应该可以从代码的任何部分访问它。我是将它存储在会话对象中还是有更好的方法?问候。
答案 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
的实例