This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch add-oauth-documentation
in repository https://gitbox.apache.org/repos/asf/streampipes-website.git

commit 30e20d11bc695ef3b8df87316494ef1bb875c2c3
Author: Dominik Riemer <[email protected]>
AuthorDate: Tue Aug 6 11:38:52 2024 +0200

    Add section on OAuth configuration
---
 docs/05_deploy-security.md | 107 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 105 insertions(+), 2 deletions(-)

diff --git a/docs/05_deploy-security.md b/docs/05_deploy-security.md
index cae5bdcbf..a2b51aa5d 100644
--- a/docs/05_deploy-security.md
+++ b/docs/05_deploy-security.md
@@ -70,6 +70,109 @@ Permissions can only be changed by admin users currently.
 In the overview section of each resource (e.g., pipelines and dashboards), a 
permission dialog is available to users with role ROLE_ADMIN. The dialog allows 
to assign users and groups to the individual resource.
 
 
-
-
+## OAuth configuration
+
+It is possible to connect StreamPipes to an external authentication provider 
such as Keycloak, Azure AD or GitHub.
+Multiple providers can be configured.
+
+To enable login over OAuth, several environment variables are available 
+
+### General settings
+
+* `SP_OAUTH_ENABLED` set to `true` to enable OAuth
+* `SP_OAUTH_REDIRECT_URI` set to the base URI where StreamPipes is running, 
e.g., `http://localhost:80`
+
+### Provider-specific settings
+
+For each configured provider, individual settings can be provided. The scheme 
for environment variables is `SP_OAUTH_{PROVIDER_ID}.*`.
+FOr instance, if you want to define two providers Azure and GitHub, you can 
add an individual block `SP_OAUTH_PROVIDER_AZURE.*` and 
`SP_OAUTH_PROVIDER_GITHUB` to provide the individual authentication settings 
for each provider.
+
+The following provider-specific settings are available:
+
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_AUTHORIZATION_URI`, the authorization URI
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_CLIENT_ID`, the OAuth client id
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_CLIENT_NAME`, the OAuth client name
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_CLIENT_SECRET`, the OAuth client secret
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_EMAIL_ATTRIBUTE_NAME`, the JWT attribute 
name for the email field, e.g., `email`
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_FULL_NAME_ATTRIBUTE_NAME`, the JWT 
attribute name for the full username, e.g., `name`(optional)
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_ISSUER_URI`, the OAuth issuer URI
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_JWK_SET_URI`, the OAuth JWK Set URI
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_NAME`, The provider name (used to display 
the login button in the UI), e.g. `Azure`
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_SCOPES`, the requested OAuth scopes, 
comma-separated, e.g., `openid,profile,email`
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_TOKEN_URI`, the OAuth token URI
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_USER_ID_ATTRIBUTE_NAME`, the JWT attribute 
name for the user ID field, e.g. `sub`
+* `SP_OAUTH_PROVIDER_{PROVIDER_ID}_USER_INFO_URI`, the OIDC user info 
endpoint, e.g., `https://graph.microsoft.com/oidc/userinfo`
+
+### Example: Authentication with Azure AD
+
+This example shows how to configure Azure AD as an authentication backend. The 
example is provided as an IntelliJ env file as used by the StreamPipes core:
+Replace the placeholders and the `SP_OAUTH_REDIRECT_URI` with your individual 
settings.
+
+```xml
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="core" 
type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+    <envs>
+        <env name="SP_OAUTH_PROVIDER_AZURE_AUTHORIZATION_URI" 
value="https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/authorize"; />
+        <env name="SP_OAUTH_PROVIDER_AZURE_CLIENT_ID" value="{CLIENT_ID}" />
+        <env name="SP_OAUTH_PROVIDER_AZURE_CLIENT_NAME" value="{CLIENT_NAME}" 
/>
+        <env name="SP_OAUTH_PROVIDER_AZURE_CLIENT_SECRET" 
value="{CLIENT_SECRET}" />
+        <env name="SP_OAUTH_PROVIDER_AZURE_EMAIL_ATTRIBUTE_NAME" value="email" 
/>
+        <env name="SP_OAUTH_PROVIDER_AZURE_FULL_NAME_ATTRIBUTE_NAME" 
value="name" />
+        <env name="SP_OAUTH_PROVIDER_AZURE_ISSUER_URI" 
value="https://login.microsoftonline.com/{TENANT_ID}/v2.0"; />
+        <env name="SP_OAUTH_PROVIDER_AZURE_JWK_SET_URI" 
value="https://login.microsoftonline.com/{TENANT_ID}/discovery/v2.0/keys"; />
+        <env name="SP_OAUTH_PROVIDER_AZURE_NAME" value="Azure" />
+        <env name="SP_OAUTH_PROVIDER_AZURE_SCOPES" 
value="openid,profile,email" />
+        <env name="SP_OAUTH_PROVIDER_AZURE_TOKEN_URI" 
value="https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token"; />
+        <env name="SP_OAUTH_PROVIDER_AZURE_USER_ID_ATTRIBUTE_NAME" value="sub" 
/>
+        <env name="SP_OAUTH_PROVIDER_AZURE_USER_INFO_URI" 
value="https://graph.microsoft.com/oidc/userinfo"; />
+        <env name="SP_OAUTH_REDIRECT_URI" value="http://localhost:8082"; />
+        <env name="SP_OAUTH_ENABLED" value="true" />
+    </envs>
+    <module name="streampipes-service-core" />
+    <option name="SPRING_BOOT_MAIN_CLASS" 
value="org.apache.streampipes.service.core.StreamPipesCoreApplication" />
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+</component>
+```
+
+### Example: Authentication with GitHub
+
+Note that you need to provide the environment variables 
`SP_OAUTH_REDIRECT_URI` and `SP_OAUTH_ENABLED` only once in case you configure 
more than one provider.
+
+```xml
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="core" 
type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+    <envs>
+        <env name="SP_OAUTH_PROVIDER_GITHUB_AUTHORIZATION_URI" 
value="https://github.com/login/oauth/authorize"; />
+        <env name="SP_OAUTH_PROVIDER_GITHUB_CLIENT_ID" value="{CLIENT_ID}" />
+        <env name="SP_OAUTH_PROVIDER_GITHUB_CLIENT_NAME" value="{CLIENT_NAME}" 
/>
+        <env name="SP_OAUTH_PROVIDER_GITHUB_CLIENT_SECRET" 
value="{CLIENT_SECRET}" />
+        <env name="SP_OAUTH_PROVIDER_GITHUB_EMAIL_ATTRIBUTE_NAME" 
value="email" />
+        <env name="SP_OAUTH_PROVIDER_GITHUB_NAME" value="Github" />
+        <env name="SP_OAUTH_PROVIDER_GITHUB_SCOPES" value="read:email" />
+        <env name="SP_OAUTH_PROVIDER_GITHUB_TOKEN_URI" 
value="https://github.com/login/oauth/access_token"; />
+        <env name="SP_OAUTH_PROVIDER_GITHUB_USER_ID_ATTRIBUTE_NAME" value="id" 
/>
+        <env name="SP_OAUTH_PROVIDER_GITHUB_USER_INFO_URI" 
value="https://api.github.com/user"; />
+        <env name="SP_OAUTH_REDIRECT_URI" value="http://localhost:8082"; />
+        <env name="SP_OAUTH_ENABLED" value="true" />
+    </envs>
+    <module name="streampipes-service-core" />
+    <option name="SPRING_BOOT_MAIN_CLASS" 
value="org.apache.streampipes.service.core.StreamPipesCoreApplication" />
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+</component>
+```
+
+### Notes
+
+:::warning
+This feature should be considered experimental. Currently, there is no mapping 
between external users and StreamPipes roles and all newly registered users 
will be assigned the role `ROLE_ADMIN`.
+:::
+
+Roles can be assigned to users in the same way as default users. In the 
`Security` settings (see above), for each user the provider is shown. For local 
users (tagged with the `local` provider), all user settings can be changed.
+For other providers, only roles can be changed and it is not possible to 
modify the username or email, since these are managed by the external system.
 

Reply via email to