使用 AspNet.Security.OpenIdConnect.Server 获取用户的个人资料

Get a user's profile using AspNet.Security.OpenIdConnect.Server

最近我花了一些时间深入研究 AspNet.Security.OpenIdConnect.Server. I use MVC sample 作为我的 client/server 应用程序的代码库。

我现在需要实现的事情是从外部提供商 (Google) 获取用户的个人资料信息并将信息保存到服务器的数据库中。

什么是获取和保存配置文件信息的正确位置以及实现它的正确方法?

注意:由于ASOS(AspNet.Security.OpenIdConnect.Server)只处理OAuth2/OpenID连接服务器部分,它实际上不涉及身份验证部分,因此不直接与您配置的外部提供商打交道.

要实现您想要的效果,最好的方法是配置 Google 中间件以从用户配置文件响应中返回的用户对象中提取更多信息,并将它们保存在身份验证 cookie 中,以便您以后可以在您的应用程序代码中检索它们。

app.UseGoogleAuthentication(options => {
    options.ClientId = "client_id";
    options.ClientSecret = "client_secret";

    options.Events = new OAuthEvents {
        OnCreatingTicket = context => {
            // Extract the "language" property from the JSON payload returned by
            // the user profile endpoint and add a new "urn:language" claim.
            var language = context.User.Value<string>("language");
            context.Identity.AddClaim(new Claim("urn:language", language));

            return Task.FromResult(0);
        }
    };
});

如果响应不包含您需要的数据,没有什么可以阻止您使用 context.Backchannel 进行另一个 HTTP 调用以从不同的 Google 端点检索更多数据。