如何在MVC项目中从已弃用的Google+登录API迁移到新的Google Identity平台?

Ste*_*ris 7 asp.net-core-mvc google-signin

几天前,我收到一封电子邮件,通知我Google将弃用其Google+ API:

在2019年3月7日,所有Google+ API和Google+登录将完全关闭。从1月下旬开始这将是逐步关闭,最早在2019年1月28日开始对这些API的调用会间歇性地失败。

我目前在ASP.NET MVC项目中使用Google+登录作为外部登录提供程序。看来,ASP.NET文档尚未更新(在撰写本文时),以考虑到此不推荐使用的API

有没有关于AddGoogle()扩展方法是否仍然可以在AuthenticationBuilder中间件中使用的指南,如果可以,如何?如果没有,我在哪里可以找到有关如何从Google+迁移到Google身份平台的指南

Ste*_*ris 6

Github页面上对此aspnet\docs一个未解决的问题

如Github上的以下问题所示,这似乎是一项重大变化:

显然,Google OAuth提供程序会调用https://www.googleapis.com/plus/v1/people/me,用于获取个人资料信息。如ThoughtHopper所说“当前代码将一直工作,直到尝试检索用户信息为止。”

Tratcher发布了一个临时的解决方法,该方法声称可用于ASP.NET 2.0及更高版本:

.AddGoogle(o =>
        {
            o.ClientId = Configuration["google:clientid"];
            o.ClientSecret = Configuration["google:clientsecret"];
            o.UserInformationEndpoint = "https://openidconnect.googleapis.com/v1/userinfo";
            o.ClaimActions.Clear();
            o.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "sub");
            o.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
            o.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "given_Name");
            o.ClaimActions.MapJsonKey(ClaimTypes.Surname, "family_Name");
            o.ClaimActions.MapJsonKey("urn:google:profile", "profile");
            o.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
            o.ClaimActions.MapJsonKey("urn:google:image", "picture");
        })
Run Code Online (Sandbox Code Playgroud)

这将更改从中检索信息的端点(不再依赖Google+),并更改用户信息的映射方式,因为此信息已更改。

从这些问题的关注中,我预计Microsoft将在不久的将来推出更新。在此之前,此修补程序应在禁用Google+ API的情况下起作用。