0

Мы используем аутентификацию службы приложений для защиты веб-API и использования Google в качестве поставщика аутентификации. Он работает, как ожидалось, когда огонь запрос из браузера (когда информация о сеансе связи в куки) журналаАутентификация службы сервиса Azure с помощью Google Token 2.0 Token Token

IIS:

2016-05-29T13: 51: 19 PID [3600] Многословный Поступила запрос: GET https://XXXXXX.azurewebsites.net/api/user 2016-05-29T13: 51: 19 PID [3600] Подробный поиск 'AppServiceAuthSession' cookie для сайта 'XXXXXX.azurewebsites.net'. Длина: 728. 2016-05-29T13: 51: 19 PID [3600] Verbose Authenticated [email protected] успешно с использованием аутентификации Session Cookie.

Но когда мы используем API инструмент для тестирования, такой как Почтальон и установить авторизацию заголовка с однонаправленными маркерами, это всегда приводит к перенаправлению.

журнал

IIS:

2016-05-29T13: 53: 38 PID [3600] Многословный Получен запрос: POST https://XXXXX.azurewebsites.net/api/user 2016-05-29T13: 53: 38 PID [3600] Информация Перенаправление: https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=XXXXXXX-XXXXX7attpunn9smo4.apps.googleusercontent.com&redirect_uri=https%3A%2F%2FXXXXXX.azurewebsites.net%2F.auth%2Flogin%2Fgoogle%2Fcallback&scope=openid+profile+email&state=nonce%3De5f4aabe11cb4544bf18d00920940d47_20160529135838%26redir%3D%2Fapi%2Fuser

мы также попытались установить X-ZUMO-AUTH заголовок с тем же самым на предъявителя, мы видим ошибку, как маркер не в ожидаемом формате. По-видимому, он ожидает кодированный токен JWT.

журнал

IIS:

016-05-29T13: 51: 52 ПИД [3600] Многословный Получен запрос: POST https://XXXXXX.azurewebsites.net/api/user 2016-05-29T13: 51: 52 ПИД [3600] Предупреждение проверки JWT не удались: IDX10708: 'System.IdentityModel.Tokens.JwtSecurityTokenHandler' не может прочитать эту строки: 'однонаправленного ya29.XXXXXXXXXX_RDrX_zsuvMx49e_9QS5ECz9F1yhDHe5j4H9gRN6opkjLXvN1IJZjHXa_Q'. Строка должна быть в компактном формате JSON, который имеет вид: '..' .. 2016-05-29T13: 51: 52 ПИД-регулятора [3600] Информация Перенаправление: https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=XXXXXXX-k5nj6dkf987attpunn9smo4.apps.googleusercontent.com&redirect_uri=https%3A%2F%2FXXXXXX.azurewebsites.net%2F.auth%2Flogin%2Fgoogle%2Fcallback&scope=openid+profile+email&state=nonce%3De15b0915406142378XXXXX_20160529135652%26redir%3D%2Fapi%2Fuser

Примечание : Знак жетона, полученный от Google, действителен, так как мы можем проверить детали, позвонив по телефону https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=[token]

Пожалуйста, предложите.

ответ

0

Токен Google, который вы используете, является токеном доступа, а не маркером-носителем. Его можно использовать для доступа к ресурсам Google, но не могут использоваться для аутентификации с помощью веб-API.

Я не смог найти хорошую документацию по этому вопросу, но я могу сказать вам, что здесь работает вместо:

  1. В клиентском приложении, вы должны получить id_token и код авторизации от Google. Обычно вы получаете это, когда пользователь регистрируется с помощью входа в Google OpenID Connect. Я предполагаю, что вы уже знаете, как это сделать, поскольку вы уже знаете, как получить токен доступа.
  2. Отправьте запрос POST на адрес https: // {hostname} /.auth/login/google с полезной нагрузкой JSON, которая выглядит как {"authorization_code":"<code>", "id_token":"<id_token>"}.
  3. Успешный ответ на вход будет содержать полезную нагрузку JSON, содержащую поле authenticationToken. Загрузите этот токен.
  4. Вы можете использовать токен аутентификации из # 3, чтобы сделать аутентифицированные вызовы веб-API. Поместите его в заголовок HTTP-запроса x-zumo-auth.
+0

Крис, мы никогда не добираемся до шага №3, потому что сервер возвращает внутреннюю ошибку сервера. –

+0

С помощью Google мы сначала получаем auth_code, а затем используем его для получения id_token в последующих запросах. https://developers.google.com/identity/protocols/OpenIDConnect#server-flow Журнал IIS: Предупреждение Вызов на конечную точку HTTP https://www.googleapis.com/oauth2/v4/token failed: 400 (Плохой запрос). Частичный ответ: { «error»: «invalid_grant», «error_description»: «Код уже был погашен». } .. Это может произойти и при повторном использовании ранее использованного кода аутентификации. –

+0

Ошибка имеет смысл. Можете ли вы использовать поток авторизации с Google, который возвращает вам код авторизации и id_token в одном ответе? Например, "response_type = code id_token"? https://developers.google.com/identity/protocols/OpenIDConnect#authenticationuriparameters. Или, если вы используете Android, можно ли самостоятельно использовать auth_code и id_token через некоторые вызовы Android API? –

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