2015-04-24 2 views
0

Короче говоря, я хочу вернуть id_token из Google с использованием стандарта OpenID Connect. Я хочу сделать это для запросов аутентификации из собственного приложения для Android, чтобы использовать мое приложение MVC, например API.Анализ Google OpenID Callback

Проблемы, когда вы устанавливаете ваш «response_type = id_token» для запроса обмена код доступа одноразовых с Google, он отвечает с параметрами фрагмента URL: http://mycallbackuri.com#id_token=<whatever>&refresh_token=<whatever>

Как вы, наверное, знаете , этот фрагмент никогда не прикасается к серверу. Обычно я могу разместить Javascript среднего человека там, чтобы обрабатывать запрос и хеш-лайты, а затем отправлять их в мою конечную точку MVC.

В случае запросов с Android, однако, это становится проблемой: как я должен сохранить исходный запрос на Android, когда мне нужно сделать новый запрос на получение токенов на стороне сервера?

Как и в фоновом режиме, у меня есть приложение для Android, которое получает код доступа от Google, а затем отправляет его в мое веб-приложение. Предполагается, что веб-приложение должно обменять его на id_token, а затем настроить необходимые файлы cookie для его аутентификации.

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

Я могу отправить код, если вы считаете, что это поможет.

+0

Почему бы не использовать грант авторизационного кода (так называемый «поток кода») и иметь внутренний код «code» для «id_token» и впоследствии возвращать идентификатор информацию в ваше приложение? Неявный поток, который вы используете, был разработан для доставки «id_token» в приложение в браузере. –

+0

Ну, это имеет смысл, за исключением того, что трудно сохранить первоначальный мобильный запрос. Поскольку Google отправляет информацию в фрагменте url, у меня нет доступа к нему на сервере, если я не разбираю его с javascript и не отправляю его сам. Это нарушает цепочку запроса-ответа, что затрудняет ее отправку в мобильное приложение. Но я мог ошибаться во всем этом. – ReimTime

+0

при использовании потока 'code',' code' отправляется как параметр запроса –

ответ

0

response_type=id_token вызовет неявный поток, который поставляет токен в фрагменте URL-адреса, который прежде всего предназначен для использования клиентами в браузере.

Использование response_type=code и убедитесь, чтобы добавить scopeopenid на запрос аутентификации, так что вы получите в параметре запроса на code что бэкенд может пикап и впоследствии получить одновременно access_token и id_token в ответ от маркеров конечной точки , Это называется профилем базового клиента OpenID Connect, см.: https://openid.net/specs/openid-connect-basic-1_0.html#TokenOK

+0

Вы правы - конечная точка аутентификации возвращает 'id_token' как фрагмент URL-адреса. Конечная точка маркера не работает! Я закончил тем, что начал работать. Благодаря! – ReimTime

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