2015-12-03 2 views
1

У меня есть вещи, которые я могу успешно аутентифицировать с помощью Google. Код выглядит как-то вдоль этих линий:OWIN Аутентификация Google - как получить id_token?

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? 
     } 
    } 
}); 

Когда Проверенный метод вызывается у меня есть доступ ко всем видам информации о пользователе через GoogleOAuth2AuthenticatedContext. Тем не менее, мне нужно иметь возможность читать raw id_token из Google, чтобы я мог добавить его в претензии и позже получить доступ к нему в потоке аутентификации. Можно ли это сделать?

ответ

2

Во-первых, убедитесь, что вы используете 3.0.1 бит, поскольку исходная версия 3.0.0 не включает свойство TokenResponse, необходимое для этого сценария.

Затем обновить уведомление OnAuthenticated извлечь маркер идентичности из маркеров ответа:

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

Чтобы разрешить «идентификатор OpenID», вы можете использовать маркер безопасности обработчик JWT для извлечения требований из тождества токен:

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

Вы были правы, я использовал 3.0.0 версию Microsoft.Owin.Security.Google. 3.0.1 прекрасно работает, поскольку дает вам доступ к токену. Благодаря! – 599

Смежные вопросы