我正在使用 asp.net mvc core (.net core 2) 实现一个 Web api,并使用 IdentityServer4 来处理身份验证,以及 EntityFrameworkCore 来存储数据。
现在我们只是在测试一些东西,所以我正在使用资源所有者授予类型,以及一些内存中的测试用户,但最终我们希望用 Facebook 登录以及其他外部提供商来替换它。
我目前正在尝试在数据库中的某个位置存储用户的个人资料信息(姓名、电子邮件、个人资料图片等),但不确定在哪里定义/声明执行此操作的类。
我是 .net 后端世界的新手,所以我列出了所有现有选项。我觉得 ASP.Net Identity 可能是一个解决方案,但到目前为止,我似乎无法通过外部身份验证来实现这一点...
实际上,我认为使用某种简单、唯一且经过验证的用户 ID 就可以了。
tl;dr:我想允许使用 facebook 登录,但我需要将用户个人资料数据存储在数据库中。我应该使用/实现哪些类来做到这一点?
最佳答案
我认为最好的解决方案是自定义方法。为用户、客户端、资源等创建您自己的数据库,并使用 IdentityServer 的解决方案来存储/检索它们。
根据用户信息 - 您会在 Identity Server 解决方案的 AccountController.cs
中收到此信息:
/// <summary>
/// Post processing of external authentication
/// </summary>
[HttpGet]
public async Task<IActionResult> ExternalLoginCallback()
{
// read external identity from the temporary cookie
var result = await HttpContext.AuthenticateAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);
.../// More stuff here
}
result.Principal
对象是一个声明主体,并且根据您的外部身份验证提供商 - 有不同的声明。
从现在开始,一切都取决于您的架构。我会选择负责自定义数据库上的 CRUD 操作的自定义服务(通过 Startup.cs 中的接口(interface)注入(inject)以获得更好的抽象),但这是我的偏好。正如我所说 - 一切都取决于你。
关于asp.net-mvc - IdentityServer4:在哪里存储/如何获取用户配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49033946/