我正在使用asp.net mvc core(.net core 2)实现web api,并使用IdentityServer4处理身份验证,以及使用EntityFrameworkCore存储数据。
现在我们只是测试一些东西,所以我使用资源所有者授权类型,一些内存测试用户,但最终我们想用facebook登录和其他外部提供商替换它。
我目前正在尝试为数据库中某处的用户存储个人资料信息(姓名,电子邮件,个人资料图片等),但不确定在哪里定义/声明要执行此操作的类。
我是.net后端世界的新手,所以我列出了所有现有选项。我觉得ASP.Net Identity可能是一个解决方案,但到目前为止我似乎无法使用外部身份验证...
实际上,我认为我可以使用某种简单的唯一且经过验证的用户ID。
tl; dr:我想允许使用facebook登录,但我需要将用户个人资料数据存储在数据库中。我应该使用/实现哪些类?
答案 0 :(得分:1)
我认为这里最好的解决方案是定制方法。为用户,客户端,资源等创建自己的数据库,并使用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
对象是声明主体,根据您的外部身份验证提供程序,有不同的声明。
从现在开始,这完全取决于您的架构。我会选择自定义服务(通过Startup.cs
中的接口注入以获得更好的抽象),这些服务负责对自定义数据库的CRUD操作,但这是我的偏好。正如我所说 - 一切都取决于你。