Как правильно настроить Identity Server 3 для потока кода авторизации с SPA? - PullRequest
0 голосов
/ 25 мая 2019

У нас есть экземпляр Identity Server 3, который некоторое время использовался с различными клиентами, некоторые из которых используют неявный поток, другие используют учетные данные клиента.Теперь у нас есть новое требование для интеграции нативного приложения iOS с этим поставщиком удостоверений.Я понимаю, что в наши дни неявный поток не рекомендуется, и общедоступные приложения должны вместо этого использовать поток кода авторизации.Примеры таких советов: здесь и здесь .

Насколько я понимаю, поток кода авторизации имеет шаг, посредством которого полученный код авторизации обменивается на токены JWT через некоторые обратныеканал, предоставляя его вместе с идентификатором клиента и секретом.Тем не менее, с SPA и родными приложениями мы не можем позволить себе роскошь хранить секреты.Руководство, которое я нашел здесь , предполагает, что я могу просто опустить секрет из запроса connect/token, но мои испытания пока не подтверждают это.Так что я застрял.Чтобы продемонстрировать, я настроил клиент на своем локальном экземпляре IS3 для тестирования с помощью:

{
    'clientId': 'test',
    'flow': 'AuthorizationCode',
    'name': 'test',
    'redirectUris': [ 'http://localhost:8080/' ], 
    'scopes': ['openid','profile']
}

Затем я делаю следующий запрос GET к своему IdP:

[ID_PROVIDER]/connect/authorize?client_id=test&redirect_uri=http%3A%2F%2Flocalhost%3A8080&scope=openid%20profile&response_type=code

Это позволяет мне войти в систему и вернуть меня в мое тестовое приложение, работающее на http://localhost:8080 с моим кодом авторизации в строке запроса.

Я сейчас пытаюсь обменять этот код на JWTтокены от POST до [ID_PROVIDER]/connect/token со следующим телом: code=[AUTH_CODE]&grant_type=authorization_code&client_id=test&redirect_uri=http%3A%2F%2Flocalhost%3A8080

Но Identity Server отклоняет это с ошибкой HTTP 400 и invalid_client.Когда я копаюсь в его журналах, я вижу событие ClientSecretValidator с сообщением "Секрет клиента не найден".Какой вид имеет смысл, основываясь на моем понимании, изложенном выше, но, учитывая, что люди рекомендуют использовать этот поток для общедоступных приложений, я должен что-то недопонимать.

Если кто-то мог бы уточнить, что было бы здорово, спасибо.

...