2017-08-26 143 views
0

我使用dotnet核心v2.0.0。我已經遷移我的認證以下這篇文章:https://go.microsoft.com/fwlink/?linkid=845470用戶未通過外部登錄身份驗證

目前,它看起來像這樣:

public void ConfigureServices(IServiceCollection services) 
{ 
    services 
     .AddDbContext<DatabaseContext>() 
     .AddIdentity<AppUser, IdentityRole>() 
     .AddEntityFrameworkStores<DatabaseContext>() 
     .AddDefaultTokenProviders(); 

    services 
     .AddAuthentication() 
     .AddFacebook(o => { 
      o.AppId = "my id"; 
      o.AppSecret = "my secret"; 
     }); 

    services 
     .AddAuthorization() 
     .AddRouting() 
     .AddMvc(); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider) 
{ 
    app.UseWebSockets(); 
    app.UseAuthentication(); 
    ServiceProvider = serviceProvider; 
    Routing.AddRoutes(app); 

    app.UseStaticFiles(); 
    app.UseMvc(); 
} 

而且回調:

[Route("api/account/external")] 

public async Task<IActionResult> GetExternalLogin(string provider, string error = null) 
{ 
    if (error != null) 
    { 
     return BadRequest(Uri.EscapeDataString(error)); 
    } 

    // info is null 
    // but HttpContext.Request.Cookies does contain a cookie 
    var info = await _signInManager.GetExternalLoginInfoAsync(); 

    .... 
} 

基於表單的註冊和認證工作。當我嘗試使用Facebook登錄時,我被重定向到登錄窗口,可以輸入我的密碼,然後被重定向回我的應用程序。

創建一個名爲Identity.External的cookie並通過請求發送。但我的用戶沒有通過身份驗證,我也沒有任何要求。爲什麼不使用cookie的身份?如果我無法通過SignInManager訪問它,有沒有辦法通過解析cookie來讀取提供者密鑰?

回答

0

我終於找到了解決方法!看來我能得到我所需要的所有信息通過AuthenticateAsync:

var auth = await HttpContext.AuthenticateAsync(IdentityConstants.ExternalScheme); 
var principal = auth.Principal; 
var providerKey = auth.Principal.Claims.FirstOrDefault(); 

提供者是「臉譜」,providerKey.Value是供應商的關鍵,我可以通過auth.Principal.Identity.Name獲取用戶名。