gpt4 book ai didi

c# - 处理与外部登录提供商的 claim

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:48 27 4
gpt4 key购买 nike

我是一个长期的 .NET Framework/WebForms 开发人员,并且正在为一个新项目转向 Core (2.1)。我已经建立了基础部分,一个 VS 解决方案包含一个 DAL 项目和一个 Web 应用程序项目(在 MVC 中)。我正在使用 Core Identity,并添加了默认身份脚手架文件。一切都很好,Facebook 注册/身份验证工作正常。到目前为止,我还不完全了解身份验证方案的工作原理,但我开始将其拼凑起来。

我想到的一件事是如何处理来自 Facebook 的 claim 数据,这也是我似乎无法找到任何清晰、直接的文档的一件事。我知道您在 AddAuthentication() 方法的设置中请求的所有内容都保存到客户端 cookie 中,您可以通过这种方式检索它。但我想做的是继续并将该信息保存到 IdentityClaims 表中。

在 Startup.cs 中,我有这样的 AddAuthentication() 设置:

services.AddAuthentication().AddFacebook(options =>
{
options.AppId = "XXXXXXXXXX";
options.AppSecret = "XXXXXXXXXX";
options.SaveTokens = true;
options.Scope.Add("public_profile");
options.Scope.Add("email");
options.Fields.Add("name");
options.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
});

老实说,我并不完全知道我的设置是否正确,要求将“名称”声明包含在请求中……但即使是,我也得承认我真的不知道如何处理它,后记。

我的猜测是\Identity\Pages\Account 文件夹中 ExternalLogin.cshtml.cs 文件的 OnPostConfirmationAsync() 方法必须发生某些事情.大概是这样的:

UserManager.AddClaimAsync(user, ...something...);

但我真的不知道,而且看起来一定有更好的方法。比如:有没有一种方法可以配置选项,使 UserManager.CreateAsync() 方法的调用也自动存储声明?

这些都是非常初级的问题,我为自己看不清楚而感到沮丧。我所需要的只是一个很好的工作范例,我相信我会得到它。到目前为止,其他一切似乎都非常基础。

最佳答案

很惊讶在发布这篇文章后我能如此迅速地找到我自己问题的答案,而且它实际上是多么初级。

老实说,关于外部提供商登录设置(在本例中为 Facebook),我并没有真正完全理解所有各种选项设置的情况。

事实证明,没有必要特别要求添加“名称”字段(它是“public_profile”范围的一部分)。在该级别将声明类型映射到更具可读性的名称也不一定有利。我认为只有当您尝试让外部登录与某种现有功能一起使用时才有必要,这需要特定的值,并且您不能在那里更改代码。

无论如何,如果您使用的是外部供应商,一旦您获得响应并拥有 SignInManagerUserManager 的实例,您可以简单地:

var info = [SignInManager instance].GetExternalLoginInfoAsync();
[UserManager instance].AddClaimsAsync([IdentityUser instance], info.Principal.Claims);

这会将从外部提供者返回的每一个声明都扔到用户声明表中。我碰巧正在做一些比这稍微复杂的事情,其中​​涉及遍历声明,以获得所需的声明。这很容易做到,一旦您意识到(正如我现在所了解的)内置 System.Security.Claims.ClaimTypes 类型包含到所有常见声明类型的完全限定模式名称的映射.因此,只需对您想要的进行分类,然后根据需要添加它们。简单的。

关于c# - 处理与外部登录提供商的 claim ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50727495/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com