在没有将身份存储在数据库中的情况下,我无法使 Microsoft 帐户身份验证正常工作。这一切都是在最新的 VS 2017 安装和最新的核心 2.0 版本中完成的。我遵循本指南并设法让它工作。问题是该指南假定身份将被添加到应用程序使用的数据库中。这是因为示例使用:
var info = await _signInManager.GetExternalLoginInfoAsync(await _userManager.GetUserIdAsync(user));
在 Startup.cs 中:
services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
这是我想避免的。我的目标是使用 MS 帐户进行身份验证并使用提供的声明(基于声明的授权)进行授权,但不需要示例中的整个数据库结构。
我已经为此苦苦挣扎了一段时间。我尝试为用户登录实现一个cookie存储(尽管据我所知MS帐户有一个)在示例的回调方法中添加 Signin 调用。回调点(在 OnGetCallbackAsync 中)的 User 对象具有我需要从 Microsoft 帐户获取的所有声明。但是,当重定向发生时,用户对象为空(没有声明,未登录)。
我想问:这里合适的方法是什么?我的理解是 MS 帐户登录已经设置了一个 cookie,因此删除联系数据库的代码应该就足够了;这不正确吗?如果是这样,我需要以上述方式对用户进行身份验证的步骤是什么?
我非常感谢您在这方面的帮助。