扩展用户登录

时间:2018-05-06 09:48:49

标签: asp.net-core asp.net-core-2.0 identityserver4 asp.net-core-identity

基于ASP.NET Core Visual Studio使用单个用户帐户进行扩展并按照IdentityServer4: Using ASP.NET Core Identity中的描述将IdentityServer4添加到项目中,帐户控制器中登录的相关部分如下所示:

    ApplicationUser user = null;

    // login with username and password
    if (!string.IsNullOrEmpty(model.Username) && !string.IsNullOrEmpty(model.Password))
    {
      var result = await _signInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberLogin, lockoutOnFailure: true);
      if (result.Succeeded)
      {
        user = await _userManager.FindByNameAsync(model.Username);
      }
    }
    if (user != null)
    {
      await _events.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id, user.UserName));
      // redirect
    }

通过此登录,identityserver4正确发出身份验证方案“Cookies”并创建所需的令牌(access_token,id_token或其他任何配置)。

现在我遇到的问题是:我想扩展用户名/密码登录,并附加一个选项,即访问密钥登录。这意味着,用户仅提供 他拥有的密钥(类似于密码)。 请放下您现在可能遇到的所有安全和用例问题。

我的代码看起来像这样:

    // login with access key
    if (!string.IsNullOrEmpty(model.AccessKey))
    {
      var result = await _signInManager.AccessKeySignInAsync(model.AccessKey);
      if (result.SignInResult.Succeeded)
      {
        user = result.User;
      }
    }
    if (user != null)
    {
      await _events.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id, user.UserName));
      // redirect
    }

简单地说,我已经使用我需要的功能扩展了SignInManager和UserManager。登录“逻辑”正常工作(UserLoginSuccessEvent与预期用户正确激活)。但是,IdentityServer4似乎没有注意到这一点。日志几乎保持空白(除了提到的事件)。我现在的问题是:我如何通知 IdentityServer4这是一个成功的用户登录并且可以发出令牌?

如果您需要实现SignInManager.AccessKeySignInAsync方法:

public async Task<(SignInResult SignInResult, ApplicationUser User)> AccessKeySignInAsync(string accessKey)
{
  if (accessKey == null)
  {
    throw new ArgumentNullException(nameof(accessKey));
  }

  var user = await _userManager.FindByAccessKeyAsync(accessKey);
  return (user != null ? SignInResult.Success : SignInResult.Failed, user);
}

0 个答案:

没有答案
相关问题