Azure AD: смешивание SPA с делегированным сценарием идентификации пользователя
Я намереваюсь разработать одностраничное приложение, которое имеет веб-API в качестве бэкэнда, которое будет вызывать некоторые другие веб-API от имени пользователя. Но я изо всех сил, как это сделать.
Я посмотрел этот список сценариев Azure AD от MS, но ни один из них, по-видимому, не подходит для моего случая. Я думаю, что мой сценарий представляет собой смесь SPA и сценария "Веб-приложение к веб-API" по этой ссылке.
Из того, что я понимаю, я должен сделать так, чтобы SPA-клиент сначала извлекал код авторизации и ID-токен из конечной точки аутентификации Azure AD, отправляя их на мой бэкэнд. Затем бэкэнд запросит у конечной точки токена Azure AD необходимые токены доступа.
Это правильно? Но как я могу это сделать (с помощью adal.js)? Я нахожу только примеры для клиента, использующего неявный поток, где получение кода авторизации пропускается, и вы напрямую заканчиваете токеном доступа. Это вообще возможно?
1 ответ
Вы понимаете, это довольно близко. После настройки сценария на портале Azure (см. Пример кода для получения справки по настройке сценария) вы войдете в систему и запросите маркер доступа через веб-API. Затем, когда веб-API получает этот токен доступа, он может выполнить запрос от имени к Azure AD, запрашивающий доступ к нисходящему веб-API. В случае успеха Azure AD выпустит для веб-API новый токен доступа, который он может использовать для нижестоящего API.
С точки зрения поддержки, одностраничное приложение должно будет использовать ADAL.js для входа в систему пользователя и получения токенов доступа. На стороне веб-API Azure AD поддерживает поток On-Behalf-Of через ADAL .NET и ADAL Java. Одним нюансом является то, что вы, вероятно, захотите защитить конечные точки и проверить токены в своем веб-API. Azure AD создал промежуточное программное обеспечение OWIN для.NET, но для веб-API Java потребуется эквивалент с открытым исходным кодом.
Вот отличный пример потока от имени в действии. Он имеет как одностраничное, так и собственное приложение, вызывающее веб-API.NET.