- Step 1. Create OAuth app
+ Step 1. Create OAuth app in your identity provider
- Please make sure that following scopes are added to the OAuth application has following access scopes: <.code_block
+ Please make sure that following scopes are added to the OAuth application: <.code_block
:for={scope <- [:openid, :email, :profile]}
id={"scope-#{scope}"}
class="w-full mb-4 whitespace-nowrap rounded"
@@ -20,7 +20,7 @@ defmodule Web.Settings.IdentityProviders.OpenIDConnect.Components do
sign_in: url(~p"/#{@account.id}/sign_in/providers/#{@id}/handle_callback"),
connect:
url(
- ~p"/#{@account.id}/settings/identity_providers/google_workspace/#{@id}/handle_callback"
+ ~p"/#{@account.id}/settings/identity_providers/openid_connect/#{@id}/handle_callback"
)
]
}
@@ -83,7 +83,7 @@ defmodule Web.Settings.IdentityProviders.OpenIDConnect.Components do
label="Client ID"
autocomplete="off"
field={adapter_config_form[:client_id]}
- placeholder="Client ID from your IDP"
+ placeholder="Client ID from your IdP"
required
/>
@@ -93,7 +93,7 @@ defmodule Web.Settings.IdentityProviders.OpenIDConnect.Components do
label="Client secret"
autocomplete="off"
field={adapter_config_form[:client_secret]}
- placeholder="Client Secret from your IDP"
+ placeholder="Client Secret from your IdP"
required
/>
@@ -102,7 +102,7 @@ defmodule Web.Settings.IdentityProviders.OpenIDConnect.Components do
<.input
label="Discovery URL"
field={adapter_config_form[:discovery_document_uri]}
- placeholder=".well-known URL for your IDP"
+ placeholder=".well-known URL for your IdP"
required
/>
diff --git a/elixir/apps/web/lib/web/live/settings/identity_providers/openid_connect/connect.ex b/elixir/apps/web/lib/web/live/settings/identity_providers/openid_connect/connect.ex
index f245b4fbe..20a44e391 100644
--- a/elixir/apps/web/lib/web/live/settings/identity_providers/openid_connect/connect.ex
+++ b/elixir/apps/web/lib/web/live/settings/identity_providers/openid_connect/connect.ex
@@ -86,4 +86,20 @@ defmodule Web.Settings.IdentityProviders.OpenIDConnect.Connect do
|> redirect(to: ~p"/#{account}/settings/identity_providers/openid_connect/#{provider_id}")
end
end
+
+ def handle_idp_callback(conn, %{
+ "provider_id" => provider_id,
+ "state" => state,
+ "error" => error,
+ "error_description" => error_description
+ }) do
+ account = conn.assigns.account
+
+ with {:ok, _code_verifier, conn} <-
+ Web.AuthController.verify_state_and_fetch_verifier(conn, provider_id, state) do
+ conn
+ |> put_flash(:error, "Your IdP returned an error (" <> error <> "): " <> error_description)
+ |> redirect(to: ~p"/#{account}/settings/identity_providers/openid_connect/#{provider_id}")
+ end
+ end
end