Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Outgoing OAuth Connections #1334

Merged
merged 4 commits into from
Feb 20, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
title: Outgoing OAuth connections
heading: Outgoing OAuth connections
weight: 20
---

As of Mattermost v9.6, you can now integrate Mattermost with custom integrations hosted within your internal OAuth infrastructure. More specifically, integrations like [slash commands](https://developers.mattermost.com/integrate/slash-commands/custom), [outgoing webhooks](https://developers.mattermost.com/integrate/webhooks/outgoing), [interactive dialogs](https://developers.mattermost.com/integrate/plugins/interactive-dialogs), and [interactive messages](https://developers.mattermost.com/integrate/plugins/interactive-messages) now support communicating via both the [Client Credentials](https://oauth.net/2/grant-types/client-credentials) and [Password](https://oauth.net/2/grant-types/password) OAuth 2.0 grant types.
cwarnermm marked this conversation as resolved.
Show resolved Hide resolved
mickmister marked this conversation as resolved.
Show resolved Hide resolved

To configure Mattermost to communicate with your OAuth system, you first need to create an Outgoing OAuth Connection in Mattermost. This involves providing the following values in the connection configuration form:

- `Client Id` & `Client Secret`
- `Token URL` - The URL that Mattermost will contact to retrieve a new token for each request to your integration
mickmister marked this conversation as resolved.
Show resolved Hide resolved
- `Audience URLs` - The URLs that your custom integration hosts to process requests, e.g. slash command submission requests
mickmister marked this conversation as resolved.
Show resolved Hide resolved

Once this is set up, whenever Mattermost sends a request to your custom integration, Mattermost will first fetch an access token from the `Token URL`, and include the access token in the request to your integration. A new token will be requested for every request sent to your integration.

### Configuring the Outgoing OAuth Connection
mickmister marked this conversation as resolved.
Show resolved Hide resolved

To configure a new outgoing OAuth connection, navigate to your Mattermost server's integrations backstage console, as shown below, then navigate to the Outgoing OAuth 2.0 Connections tab, and select "Add Outgoing OAuth Connection". If you don't have the **Integrations** option in your Product Switcher, integrations may not be enabled on your Mattermost Server or may be disabled for non-admins. Enable them from **System Console > Integrations > Integration Management** or ask your Mattermost System Admin to do so.
mickmister marked this conversation as resolved.
Show resolved Hide resolved

![image](product_switcher.png)

![image](backstage_sidebar.png)

Now we can configure our OAuth connection. With the values configured in the example below, Mattermost will perform the following operations when a user interacts with your integration, e.g. when the user submits a slash command associated with your integration.

- Mattermost will request an access token from `Token URL`, by providing the `Client Id` and `Client Secret` via a URL-encoded form submission
mickmister marked this conversation as resolved.
Show resolved Hide resolved
- Mattermost will send a request to your slash command submission handler, with the access token in the request's `Authorization` HTTP header, in the format of `Bearer (token)`
mickmister marked this conversation as resolved.
Show resolved Hide resolved

Any further requests to your integration (such as interactive dialog submissions) will perform the above steps as well.

Notice that the `Audience URL` configured below ends in a wildcard `*`. This means that an access token will be retrieved for any integration request that matches that URL, i.e. any URL that has the prefix of the string leading up to the `*` character. If you would like to restrict the OAuth connection to exact URLs, simply omit the `*`, and supply the exact URLs you would like to configure for your integration. You can come back to this form to update these values at any time. Note that the `Client Secret` will not be shown again when you return to this form.

You can validate that the connection is set up properly by clicking the "Validate Connection" button. This will cause Mattermost to request a token from the `Token URL` using the provided credentials. If a token is retrieved successfully, a message "Validated Connection" will be shown in the UI. If the token retrieval was unsuccessful for any reason, an error will be shown in the UI. Note that validating the connection here is optional, though a warning will be shown upon submitting the form if the connection was not validated before submission.
mickmister marked this conversation as resolved.
Show resolved Hide resolved

![image](add_outgoing_oauth_connection_form.png)

![image](edit_outgoing_oauth_connection_form.png)

### Configuring a Slash Command to use the Outgoing OAuth Connection
mickmister marked this conversation as resolved.
Show resolved Hide resolved

In order to configure your custom Slash Command to use the OAuth connection, we just need to provide a request URL that matches the `Audience URL` provided in the OAuth connection form. If you have at least one OAuth connection configured on your Mattermost instance, you will see a message in the slash command configuration form stating whether or not your slash command will use a configured OAuth connection.

![image](slash_command_form_not_connected.png)

![image](slash_command_form_connection.png)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading