2017-09-23 96 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