请求额外索赔Owin Security

时间:2014-03-21 11:20:27

标签: c# oauth-2.0 google-oauth owin

我正在尝试使用OWIN Security从Google OAuth握手中检索其他信息。

我有以下内容要求Google提供用户个人资料声明,而Google权限页面则反映了请求此声明。

var googleConfig = new Microsoft.Owin.Security.Google.GoogleOAuth2AuthenticationOptions
{
    ClientId = ClientId",
    ClientSecret = "Secret"
};

googleConfig.Scope.Add("https://www.googleapis.com/auth/userinfo.profile");

app.UseGoogleAuthentication(googleConfig);

但是,当我使用AuthenticationManager.GetExternalLoginInfoAsync();收到回复时,用户只有一个名称声明。

在登录时从谷歌取回用户个人资料数据需要做什么?

1 个答案:

答案 0 :(得分:1)

您需要访问提供商的OnAuthenticate事件中的其他声明。在那里,上下文参数包含您在范围中要求的这些附加属性。例如,使用Facebook时:

var fb = new FacebookAuthenticationOptions
{
    AppId = "...",
    AppSecret = "...",
    AuthenticationType = "Facebook",
    SignInAsAuthenticationType = "ExternalCookie",
    Provider = new FacebookAuthenticationProvider
    {
        OnAuthenticated = async ctx =>
        {
            if (ctx.User["birthday"] != null)
            {
                ctx.Identity.AddClaim(new Claim(ClaimTypes.DateOfBirth, ctx.User["birthday"].ToString()));
            }
        }
    }
};
fb.Scope.Add("user_birthday");
app.UseFacebookAuthentication(fb);