我使用 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 被创建并通过请求发送。但是我的用户没有经过身份验证,我也没有任何声明。为什么 Identity 不使用 cookie?如果我无法通过 SignInManager 访问它,有没有办法通过解析 cookie 来读取提供程序密钥?
我终于找到了解决方法!似乎我可以通过 AuthenticateAsync 获得我需要的所有信息:
var auth = await HttpContext.AuthenticateAsync(IdentityConstants.ExternalScheme);
var principal = auth.Principal;
var providerKey = auth.Principal.Claims.FirstOrDefault();
Provider 是“Facebook”,providerKey.Value 是 provider key,我可以通过 auth.Principal.Identity.Name 获取用户名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句