OWIN Google身份验证 - 如何获取id_token?

时间:2015-12-03 18:31:32

标签: c# oauth-2.0 google-authentication identityserver3

我设置了一些内容,以便能够使用Google成功进行身份验证。代码看起来像这样的东西:

app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions
{
    AuthenticationType = "Google",
    Caption = "Sign-in with Google",
    SignInAsAuthenticationType = signInAsType,
    ClientId = "yyy",
    ClientSecret = "zzz",
    Provider = new GoogleOAuth2AuthenticationProvider
    {
        OnAuthenticated = async context =>
        {
            // How can I access id_token here?
        }
    }
});

当调用Authenticated方法时,我可以通过GoogleOAuth2AuthenticatedContext访问有关用户的各种信息。但是,我需要能够从Google读取原始id_token,以便我可以将其添加到声明中,并在以后的身份验证流程中访问它。有什么方法可以做到吗?

1 个答案:

答案 0 :(得分:2)

首先,请确保您使用3.0.1位,因为最初的3.0.0版本不包含此方案所需的TokenResponse属性。

然后,更新您的OnAuthenticated通知以从令牌响应中提取身份令牌:

var token = context.TokenResponse.Value<string>("id_token");

要解析&#34; OpenID标识符&#34;,您可以使用JWT安全令牌处理程序从身份令牌中提取声明:

var jwt = new JwtSecurityToken(token);
var identifier = jwt.Claims.FirstOrDefault(claim => string.Equals(claim.Type, "openid_id", StringComparison.InvariantCulture));