.NET Core MVC:验证外部登录而不创建帐户

时间:2017-07-18 07:19:33

标签: c# asp.net-mvc

我正在尝试利用.NET核心MVC应用中的Microsoft.AspNetCore.Authentication.MicrosoftAccount,如here所述,但我想跳过存储层,以便用户不会输入数据库。

我想要实现的是:好吧,我的用户只是外部Microsoft帐户,我不对它们进行任何管理,我只是让他们登录到应用程序并检查,以某种方式(列表或其他)哪个一些是允许的(如john@boo.com可以登录,并且由于他的身份经过Microsoft帐户验证,嗯,然后他可以进入)。

我所做的是从典型的

开始
dotnet new mvc --auth Individual 

他们修改它以支持Microsoft帐户,并且有效。

但是,我想绕过在数据库中创建用户,并将其登录。我尝试了以下内容:

// GET: /Account/ExternalLoginCallback
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
    if (remoteError != null)
    {
        ModelState.AddModelError(string.Empty, $"Error from external provider: {remoteError}");
        return View(nameof(Login));
    }
    var info = await _signInManager.GetExternalLoginInfoAsync();
    if (info == null)
    {
        return RedirectToAction(nameof(Login));
    }

    var email = info.Principal.FindFirstValue(ClaimTypes.Email);

    var user = new ApplicationUser { UserName = email, Email = email };

    // var result = await _userManager.CreateAsync(user);

    await _signInManager.SignInAsync(user, isPersistent: false);

    _logger.LogInformation(3, "Microsoft account logged in.");

    return RedirectToLocal(returnUrl);
}

但如果我不这样做

_userManager.CreateAsync
它悲惨地失败了:-S

那么,有没有办法实现这一点,或者我正在尝试的方法违背了身份原则?

谢谢!

1 个答案:

答案 0 :(得分:-1)

This article显示如何在没有ASP.NET身份的情况下使用ASP.NET OAuth提供程序,换句话说没有数据库。