如何在ASP.NET Core 2.0 MVC应用程序的HomeController中获取当前的外部提供程序

时间:2019-06-06 12:53:51

标签: c# asp.net-core asp.net-core-identity

我正在使用单个帐户创建ASP.NET Core 2.0 MVC。 Google和Microsoft身份验证工作正常。现在,我正在使用它来访问Google和Microsoft帐户中的数据(这种情况发生在HomeController中)。如果我知道要使用哪个提供程序,我就可以做到这一点。

在AccountController中,有关开箱即用的当前使用的提供商(例如Google,Microsoft)的信息。

但是此信息不会持续存在,因此我无法在HomeController中使用它。从HomeController访问时,signInManager.GetExternalLoginInfoAsync()返回null。

我可以自己(通过更改AccountController.ExternalLoginCallback将其保存到一些持久性存储中,但是由于有通过其他方法获取当前提供者的正确/推荐方法,这可能是多余的吗?或者使signInManager.GetExternalLoginInfoAsync在HomeController中工作。

注意:关于“ signInManager.GetExternalLoginInfoAsync为null”的讨论有很多问题,但是它们涉及的另一种情况是,即使在AccountController中它也为null(通常是由于外部提供程序的配置错误)。我的情况不同,signInManager.GetExternalLoginInfoAsync在这里工作正常。

1 个答案:

答案 0 :(得分:1)

使用外部提供商登录时,SignInManagerhttp://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod类型的声明添加到ClaimsPrincipalsource)中。您可以读取该值来确定使用哪个提供商进行登录。

下面是一些示例代码,您应该可以直接将它们插入HomeController

var externalProvider = User.FindFirstValue(ClaimTypes.AuthenticationMethod);