使用AspNet.Security.OpenIdConnect.Server获取用户的配置文件

时间:2016-02-16 14:01:06

标签: oauth-2.0 asp.net-core openid-connect google-oauth2 aspnet-contrib

最近我花了一些时间深入研究AspNet.Security.OpenIdConnect.Server。我使用MVC sample作为客户端/服务器应用程序的代码库。

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

获取和保存个人资料信息的正确位置以及实施该信息的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

注意:由于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);
        }
    };
});

You can retrieve the urn:language claim from the User instance

如果响应中不包含您需要的数据,则不会阻止您使用context.Backchannel进行其他HTTP调用以从其他Google端点检索更多数据。