使用 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 端点检索更多数据。
最近我花了一些时间深入研究 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 端点检索更多数据。