Вступление
Модуль поставщика OAuth2 позволяет настроить приложение Mule runtime engine (Mule) в качестве диспетчера аутентификации в танце OAuth2. С этой ролью приложение сможет аутентифицировать ранее зарегистрированных клиентов, предоставлять токены, проверять токены или регистрировать и удалять клиентов — все это во время выполнения потока.
MuleSoft поддерживает различные сторонние поставщики OAuth 2.0, как указано ниже:
- Okta.
- OpenID Connect.
- Откройте AM.
- PingFederate.
MuleSoft может также использоваться в качестве поставщика OAuth для защиты приложений. В этой статье мы увидим, как мы можем реализовать OAuth, используя OAuth-провайдер MuleSoft для защиты API приложений.
Настройка модуля поставщика OAuth2 в AnyPoint Studio
По умолчанию вы не найдете модуль поставщика OAuth2 в AnyPoint Studio. Вам нужно искать взамен и установить его в AnyPoint Studio. Этот модуль поставщика OAuth2 используется для создания клиентов, генерации токенов, проверки, удаления или отзыва токенов.
Настройка хранилища объектов в AnyPoint Studio
Вам потребуется постоянное хранилище объектов для хранения клиентов и токенов. Итак, нам нужно установить Object Store Connector в AnyPoint Studio с биржи.
Создание проекта в AnyPoint Studio и реализация MuleSoft в качестве поставщика OAuth
Создайте приложение MuleSoft в AnyPoint Studio (т.е. mule-oauth-provider ).
Создайте два постоянных хранилища объектов в глобальной конфигурации, одно для хранения клиентов, а другое для хранения токенов (то есть token_os и client_os ).
Создайте конфигурацию поставщика OAuth2 в глобальной конфигурации.
- Настройте конфигурацию прослушивателя и оставьте все по умолчанию.
- Установите Хранилище клиента в Хранилище объектов (т.е. client_os ) для хранения клиентов.
- Установите для поддерживаемых типов грантов значение CLIENT_CREDENTIALS .
- Установите путь токена / токен . Это будет использоваться для генерации токена на предъявителя.
- Установите Token store в Object Store (то есть token_os ) для хранения токенов.
- Установите Token ttl на 86400 (т.е. это время истечения для токена).
Внедрение OAuth2-провайдера Создание потока клиентов
Перетащите HTTP-слушатель в поток Mule. Используйте тот же конфиг слушателя HTTP, который мы создали выше. Путь должен быть / createClient .
Перетащите клиентский компонент OAuth2 Provide Create в обработчик сообщений и настройте его. Это будет использоваться для генерации нашего client_id
и client_secret
.
Мы будем отправлять client_id
и client_secret
в заголовок, поэтому клиентский компонент будет читать client_id
и client_secret
из заголовка в запросе.
Настройте клиентский компонент Create, как показано ниже на скриншоте.
Наконец, поместите заданную полезную нагрузку в конец потока в обработчике сообщений и установите значение «Клиент создан».
Внедрение OAuth2-провайдера проверяет поток клиентов
Перетащите HTTP-слушатель в поток Mule. Используйте ту же конфигурацию слушателя HTTP, которую мы создали выше. Путь должен быть / подтвердить .
Перетащите клиентский компонент OAuth2 Provide Validate в обработчик сообщений и настройте его. Это будет использоваться для проверки токена.
Настройте клиент проверки, как показано на следующем снимке экрана:
Наконец, поместите компонент сообщения Transform в конец потока в процессоре сообщений, чтобы преобразовать полезную нагрузку в сообщение JSON.
Теперь у нас есть три конечные точки, как показано ниже:
Конечная точка | Описание |
/ createClient | Эта конечная точка будет использоваться для создания client_id и client_secret. |
/ маркер | Эта конечная точка будет использоваться для генерации токена на предъявителя. |
/ Validate | Эта конечная точка будет использоваться для проверки токена на предъявителя. |
Код
XML
1
2
<mule xmlns:sftp="http://www.mulesoft.org/schema/mule/sftp" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
4
xmlns:oauth2-provider="http://www.mulesoft.org/schema/mule/oauth2-provider"
5
xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:os="http://www.mulesoft.org/schema/mule/os" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
6
http://www.mulesoft.org/schema/mule/os http://www.mulesoft.org/schema/mule/os/current/mule-os.xsd
7
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
8
http://www.mulesoft.org/schema/mule/oauth2-provider http://www.mulesoft.org/schema/mule/oauth2-provider/current/mule-oauth2-provider.xsd
9
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
10
http://www.mulesoft.org/schema/mule/sftp http://www.mulesoft.org/schema/mule/sftp/current/mule-sftp.xsd">
11
<os:object-store name="client_os" doc:name="Object store" doc:id="25ba20fa-2c77-4f23-b771-576bebe34ace" ></os:object>
12
<os:object-store name="token_os" doc:name="Object store" doc:id="1fdbceb1-1aa9-425c-be8f-3b7801215131" ></os:object>
13
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="977752c7-ead6-4b98-984d-bca9a74209b0" >
14
<http:listener-connection host="0.0.0.0" port="8081" ></http:listener>
15
</http:listener-config>
16
<oauth2-provider:config name="OAuth2_Provider_Config" doc:name="OAuth2 Provider Config" doc:id="7f95caec-2f0d-4d85-b574-75cb537b6de1" listenerConfig="HTTP_Listener_config" clientStore="client_os" supportedGrantTypes="CLIENT_CREDENTIALS" >
17
<oauth2-provider:token-config tokenStore="token_os" ></oauth2>
18
</oauth2-provider:config>
19
<flow name="mule-oauth-providerFlow" doc:id="0c63b1ef-940b-4bff-b19e-b9a37e7bf800" >
20
<http:listener doc:name="Listener" doc:id="a3ce980f-65e1-41a6-8b7a-4cf6625102a0" config-ref="HTTP_Listener_config" path="/createClient"></http:listener>
21
<oauth2-provider:create-client doc:name="Create client" doc:id="7b06f2ce-cb7a-4b8c-bc6a-f0e5896a1b26" config-ref="OAuth2_Provider_Config" clientId="#[attributes.headers.client_id]" type="CONFIDENTIAL" secret="#[attributes.headers.client_secret]" clientName="#[attributes.headers.client_name]" description='#[""]' principal='#[""]' redirectUris='#[["abc.com"]]' authorizedGrantTypes='#[["CLIENT_CREDENTIALS"]]' failIfPresent="true"></oauth2>
22
<set-payload value='#["Client Created"]' doc:name="Set Payload" doc:id="e6bed6e3-a147-4f13-b149-a96d904ca983" ></set>
23
</flow>
24
<flow name="mule-oauth-providerFlow1" doc:id="bc93aa72-741f-47c2-9ff7-91daa137c8cd" >
25
<http:listener doc:name="Listener" doc:id="eb9b62ae-1a37-489e-9eaf-df95e054b708" config-ref="HTTP_Listener_config" path="/validate"></http:listener>
26
<oauth2-provider:validate-token doc:name="Validate token" doc:id="645d9c42-c475-4727-b884-94ecfc95ccd9" config-ref="OAuth2_Provider_Config"></oauth2>
27
<ee:transform doc:name="Transform Message" doc:id="3ef979ad-899f-49e3-bc5c-7f923e090636" >
28
<ee:message >
29
<ee:set-payload ><![CDATA[%dw 2.0
30
output application/json
31
---
32
payload]]></ee:set-payload>
33
</ee:message>
34
</ee:transform>
35
</flow>
36
</mule>
Развертывание приложения в CloudHub
После завершения разработки вы можете развернуть приложение в CloudHub. Создайте файл Jar и разверните приложение в CloudHub Runtime Manager.
Тестирование приложения с помощью почтальона
Шаг 1: Во-первых, нам нужно сгенерировать client_id
и client_secret
. Мы будем использовать конечную точку / createClient .
Мы будем называть URL CloudHub и проедем client_id
, client_secret
, и в client_name
качестве заголовка в нашей просьбе. После того, как мы размещаем запрос, он будет создать client_id
и client_secret
и хранить их в хранилище объектов клиента.
Как правило, мы используем эту конечную точку всякий раз, когда есть необходимость в генерации нового client_id
и client_secret
.
Шаг 2 : Как только мы сгенерируем client_id
и client_secret
, мы можем сгенерировать токен на предъявителя, используя конечную точку / токен . Передайте заголовок client_id
и client_secret
как заголовок, созданный на шаге 1.
Еще один заголовок должен пройти, и это grant_type
.
Шаг 3 : Как только мы получим токен на предъявителя, его можно проверить с помощью конечной точки / validate . Этот токен необходимо передать как заголовок авторизации.
Применение политик OAuth 2.0 Принудительное использование токенов доступа с помощью Mule OAuth-провайдера
У вас есть приложение, развернутое в Runtime Manager, и API был создан в API Manager, но авторизация не настроена. Таким образом, вы можете применить политику «Применение маркеров доступа OAuth 2.0 с использованием поставщика Oleuth Mule», как показано на снимке экрана ниже в API Manager.
Вам необходимо предоставить / подтвердить URL-адрес вашего приложения OAuth CloudHub. Это будет применять политики к вашему заявлению. Вам необходимо передать токен на предъявителя вместе с вашим запросом в заголовок авторизации для запроса на авторизацию.
Вот как вы можете использовать MuleSoft в качестве поставщика OAuth для защиты приложений Mule.