我设置了一些内容,以便能够使用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,以便我可以将其添加到声明中,并在以后的身份验证流程中访问它。有什么方法可以做到吗?
答案 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));