Oauth 2.0 获取一个用户';s使用AspNet.Security.OpenIdConnect.Server配置文件

Oauth 2.0 获取一个用户';s使用AspNet.Security.OpenIdConnect.Server配置文件,oauth-2.0,asp.net-core,openid-connect,google-oauth,aspnet-contrib,Oauth 2.0,Asp.net Core,Openid Connect,Google Oauth,Aspnet Contrib,最近我花了一些时间深入研究。我将其用作客户端/服务器应用程序的代码库 我现在需要实现的是从外部提供商(Google)获取用户的个人资料信息,并将信息保存到服务器的数据库中 什么是获取和保存配置文件信息的正确位置以及实现它的正确方法?注意:由于ASOS(AspNet.Security.OpenIdConnect.Server)只处理OAuth2/OpenID Connect服务器部分,它实际上不涉及身份验证部分,因此不会直接处理您配置的外部提供程序 要实现您想要的功能,最好的方法是配置Google

最近我花了一些时间深入研究。我将其用作客户端/服务器应用程序的代码库

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

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

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

要实现您想要的功能,最好的方法是配置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);
        }
    };
});
app.UseGoogleAuthentication(选项=>{
options.ClientId=“客户\用户id”;
options.ClientSecret=“client\u secret”;
options.Events=新的OAuthEvents{
OnCreatingTicket=上下文=>{
//从返回的JSON负载中提取“language”属性
//用户配置文件端点并添加新的“urn:language”声明。
var language=context.User.Value(“语言”);
context.Identity.AddClaim(新的声明(“urn:language”,language));
返回Task.FromResult(0);
}
};
});

如果响应中不包含所需的数据,则没有任何内容阻止您使用
context.Backchannel
进行另一个HTTP调用,以从不同的Google端点检索更多数据