#wso2 #wso2is #wso2-am
Вопрос:
Я привел ниже пример использования, который должен быть реализован :
Пользователь должен иметь возможность войти в систему через поток предоставления кода авторизации внешнего IDP в поставщика услуг, настроенный на Сервере идентификации WSO2 -> Это требование было выполнено путем добавления внешнего IDP и настройки его в качестве Федеративного аутентификатора в Поставщике услуг.
После входа в систему мы также хотим сохранить идентификатор доступа пользователя внешнего IDP. Чтобы мы могли вызывать внешние пользовательские API. Попробовал следующие подходы:
- Попытался опубликовать внешние API в диспетчере API WSO2, но для доступа к внешнему API/ресурсу нам нужен токен доступа текущего пользователя. Поскольку мы можем настроить типы предоставления учетных данных клиента/пароля владельца ресурса, которые будут либо разрешать приложение, либо конкретного пользователя. Но наше использование не ограничивается конкретным пользователем.
Конфигурации безопасности конечных точек WSO2 APIM
Хотел бы знать, как я могу выполнить свои требования, используя WSO2 IS и WSO2 API Manager(только при необходимости).
Любые возможные решения, связанные с этим требованием, высоко ценятся. Заранее спасибо.
Среда WSO2 — > v5.10.0 Менеджер API WSO2 ->> v3.2.0
Комментарии:
1. Где вы хотите сохранить маркер доступа пользователя?. Ожидается, что он будет храниться в пространстве пользователя?. И откуда вы вызываете API, опубликованные в apim?
2. @anuu_online изначально планировал сделать это как одно из утверждений в сгенерированном токене доступа WSO2. Но это было бы правильно с точки зрения безопасности. Поэтому я ищу, какие могут быть возможные варианты. В настоящее время API-интерфейсы не публикуются в apim.
3. Мне не совсем ясен весь рабочий процесс. Является ли ваше приложение браузером SPA или собственным /веб-сервисом ? Если API-интерфейсы доступны через APIM, то для проверки маркера доступа необходимо использовать соответствующий менеджер ключей. Например, если токен доступа генерируется IS, то используйте диспетчер ключей IS. Что такое внешний IDP, который вы используете. ? Если это OKTA, apim предоставляет менеджер ключей из коробки.
4. @anuu_online Наше приложение представляет собой СПА-салон для браузера (ASP.NET MVC), который был добавлен в качестве поставщика услуг. У нас есть интеграция с ADP, и поэтому мы предоставляем возможность входа в систему с помощью ADP(внешний IDP). В настоящее время мы переходим на WSO2 из Asp.Net Сервер идентификации. Ранее мы сохраняли оба токена (Asp.Net Токен доступа Idp и Adp). Таким образом, соответствующие API ADP могут быть вызваны с помощью маркера доступа adp. При необходимости я планировал опубликовать API-интерфейсы ADP в диспетчере API, которые можно было бы вызвать с помощью IS_token, который мог бы внутренне генерировать токен доступа adp текущего пользователя и вызывать API-интерфейсы ADP.
Ответ №1:
Этот доступ, полученный с помощью WSO2, на половину пользователя сохраняется в контексте аутентификации в исходящем соединителе OIDC. https://github.com/wso2-extensions/identity-outbound-auth-oidc/blob/master/components/org.wso2.carbon.identity.application.authenticator.oidc/src/main/java/org/wso2/carbon/identity/application/authenticator/oidc/OpenIDConnectAuthenticator.java#L486. После успешной федеративной аутентификации событие SESSION_CREATE будет опубликовано Сервером идентификации. Таким образом, вы можете написать обработчик событий и прослушать это событие SESSION_CREATE. Затем вы можете получить доступ из контекста аутентификации, используя свой обработчик событий.
Документы об обработчиках событий
https://is.docs.wso2.com/en/5.12.0/develop/writing-a-custom-event-handler/
https://medium.com/@isurakarunaratne/wso2-identity-server-eventing-framework-32505bcc1600
Обратитесь к этой реализации для написания пользовательского обработчика событий для прослушивания события SESSION_CREATE. https://github.com/wso2-extensions/identity-inbound-auth-oauth/blob/master/components/org.wso2.carbon.identity.oauth/src/main/java/org/wso2/carbon/identity/oauth2/token/bindings/handlers/TokenBindingExpiryEventHandler.java#L65
Комментарии:
1. Чтобы я мог вызвать наш внутренний API, передав этот маркер доступа из пользовательского обработчика событий ??
2. ДА. Проверьте, имеет ли полученный доступ необходимые области и разрешения. Вы можете изменить области действия с помощью средства проверки подлинности