2 回答
TA贡献1848条经验 获得超10个赞
看起来 Google 已弃用 Google+ 来检索用户信息:
在 ASP.Net Core MVC 2.0 中,我最终在 Startup.cs:ConfigureServices 中执行此操作
services.AddAuthentication(options => {
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddGoogle(options => {
options.ClientId = Configuration["Authentication:Google:ClientId"];
options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
options.SaveTokens = true;
options.UserInformationEndpoint = "https://www.googleapis.com/oauth2/v2/userinfo";
options.ClaimActions.Clear();
options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
options.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
options.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "given_name");
options.ClaimActions.MapJsonKey(ClaimTypes.Surname, "family_name");
options.ClaimActions.MapJsonKey("urn:google:profile", "link");
options.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
options.ClaimActions.MapJsonKey("picture", "picture");
})
;
不要忘记在 app.UseMvc() 之前添加以下行
app.UseAuthentication();
此外,您还需要为您的应用程序配置 Google API 以获得云身份。
要显示信息,您可以执行以下操作:
@Context.User.Identity.Name
<img src="@Context.User.Claims.SingleOrDefault(c => c.Type == "picture")?.Value" />
最后:请考虑此信息的隐私。在不告诉用户您存储私人信息以及存储目的的情况下存储私人信息是不道德的。
TA贡献1798条经验 获得超7个赞
使用下面的代码获取用户数据。
services.AddAuthentication(options => {
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddGoogle(options => {
options.ClientId = Configuration["Authentication:Google:ClientId"];
options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.SaveTokens = true;
options.UserInformationEndpoint = "https://openidconnect.googleapis.com/v1/userinfo";
options.ClaimActions.Clear();
options.ClaimActions.MapJsonKey(ClaimTypes.PPID, "ppid");
options.ClaimActions.MapJsonKey(ClaimTypes.Name, "email");
});
您通过回调方法获得的所有数据都通过 inClaim type和进入控制器value。
如果你想进入其他而不是添加你的密钥,比如options.ClaimActions.MapJsonKey(ClaimTypes, jsonKey)
- 2 回答
- 0 关注
- 175 浏览
添加回答
举报