Парсинг Google OpenID Callback
Короче говоря, я хочу получить id_token от Google, используя стандарт OpenID Connect. Я хочу сделать это с запросами на аутентификацию от нативного приложения Android, чтобы использовать мое MVC-приложение как API.
Проблема в том, что когда вы устанавливаете свой 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 и пометить запрос как аутентифицированный?
Я могу опубликовать код, если вы думаете, что это поможет.
1 ответ
response_type=id_token
запустит неявный поток, который доставляет токен во фрагменте URL, в первую очередь предназначенный для использования клиентами в браузере.
использование response_type=code
и не забудьте добавить scope
openid
на запрос аутентификации, чтобы вы получили code
в параметре запроса, который сервер может получить и впоследствии получить как access_token
и id_token
в ответе от конечной точки токена. Это называется профилем OpenID Connect Basic Client, см.: https://openid.net/specs/openid-connect-basic-1_0.html