Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
png
oidc_crushftp_related_settings... 137.0 kB 1 09-Jan-2025 07:29 krivacsz
png
oidc_dmz_plugin_settings.png 141.0 kB 2 09-Jan-2025 23:13 krivacsz
png
oidc_general_plugin_settings.p... 39.3 kB 1 09-Jan-2025 07:32 krivacsz
png
oidc_idp_related_plugin_settin... 176.0 kB 3 09-Jan-2025 23:17 krivacsz
png
oidc_login_buttons.png 59.4 kB 1 09-Jan-2025 07:50 krivacsz

This page (revision-295) was last changed on 10-Jan-2025 02:22 by krivacsz

This page was created on 06-Jan-2025 23:39 by krivacsz

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Difference between version and

At line 2 changed one line
The plugin supports __OpenID Connect__ ([https://en.wikipedia.org/wiki/OpenID]), an authentication protocol built on the OAuth 2.0 ([https://en.wikipedia.org/wiki/OAuth]) authorization framework. It facilitates user identity verification and enables single sign-on (SSO) capabilities, streamlining the authentication process for users.\\
The plugin supports __OpenID Connect SSO__ ( more info: [https://en.wikipedia.org/wiki/OpenID]), an authentication protocol built on top of the OAuth 2.0 ([https://en.wikipedia.org/wiki/OAuth]) authorization framework.\\
At line 4 changed one line
__Constraints__: It only works through __HTTP__ or __HTTPS__ protocol. It requires __Enterprise License__.\\
__!!! Constraints__: It only works through __HTTP__ or __HTTPS__ protocol. __Authorization Code Flow__ is supported (Implicit Flow or Hybrid Flow are not supported). It requires __Enterprise License__.\\
At line 6 changed one line
!1. Plugin Configuration\\
!!!1. Identity Provider's (IdP) general configuration\\
The plugin requires the following information and configurations from the IdP's __App Registration__:\\
• __Client ID__\\
• __Client Secret__: Authorization Code Flow requires it.\\
• __Redirect URL__: The redirect URL is the endpoint in your IdP application where the IdP directs the user after successful authentication. This URL receives the authorization code or access token as part of the authentication process. The redirect URL must target the CrushFTP server and conclude with __/SSO_OIDC/__. Like:\\
{{{
https://your.domain.com/SSO_OIDC/
}}}\\
At line 15 added 13 lines
__Google__: Refer to the App registration section under: [SMTP Google Mail Integration] ensure the redirect URL is described above.\\
\\
__Microsoft__: Refer to the App registration (Ondrive Personal) section under: [OneDriveSetup] ensure the redirect URL is described above.\\
__Microsoft B2C__: Refer to the App registration section under: [Azure Active Directory B2C Configuration] ensure the redirect URL is described above.\\
\\
__Amazon Cognito__: Refer to the App registration section under: [Amazon Cognito Configuration] ensure the redirect URL is described above.\\
\\
__Dropbox__: Refer to the App registration section under: [Dropbox Integration] ensure the redirect URL is described above.\\
\\
!!!2. Plugin Configuration\\
!!2.1 IdP related settings\\
\\
At line 9 changed one line
\\\
\\
!2.1.1 OpenID Configuration URL {{''__(Required)__''}}: \\
\\
__Dynamic endpoint:__\\
\\
This HTTPS URL is part of the OpenID Connect (OIDC) Discovery mechanism. It follows a standard called __RFC 5785__ ([https://datatracker.ietf.org/doc/html/rfc5785]), which defines the use of __.well-known__ URIs for discovering metadata about services. It queries this HTTP endpoint to configure itself dynamically, avoiding hard-coded values. The retrieved JSON document includes important endpoints and details like:\\
• Authorization endpoint {{''__(Required)__''}}\\
• Token endpoint\\
• User info endpoint\\
• Supported scopes and claims\\
• Public keys for verifying tokens\\
\\
List of __.well-known__ URLs for various identity providers and services that support OpenID Connect (OIDC):\\
{{{
Google: https://accounts.google.com/.well-known/openid-configuration
Microsoft Azure AD: https://login.microsoftonline.com/{tenant_id}/v2.0/.well-known/openid-configuration
Microsoft Azure B2C: https://{tenant_name}.b2clogin.com/{tenant_name}.onmicrosoft.com/{policy}/v2.0/.well-known/openid-configuration
Amazon (Cognito): https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/openid-configuration
Okta: https://{yourOktaDomain}/.well-known/openid-configuration
Auth0: https://{yourDomain}.auth0.com/.well-known/openid-configuration
Dropbox: https://www.dropbox.com/.well-known/openid-configuration
}}}\\
\\
__Local endpoint:__\\
\\
You can reference a __local JSON file__ if the identity provider (IdP) does not support OpenID Connect but does support __OAuth 2.0__ (like Box cloud storage). Instead of specifying an HTTP URL, provide the path to a local JSON file, such as:\\
{{{
./box_open_id_config.json
}}}\\
\\
The JSON file should include the __authorization endpoint__ ({{''__(Required)__''}}). Example for Box cloud storage:
{{{
{
"authorization_endpoint":"https://account.box.com/api/oauth2/authorize",
"token_endpoint":"https://api.box.com/oauth2/token"
}
}}}
\\
!2.1.2 App registration related informations:\\
\\
__Client ID__: Provide the Client ID (the unique identifier of your IdP's App registration) of your IdP.\\
__Client Secret__: Provide the Client Secret of your IdP.\\
\\
!2.1.3 Authorization related settings {{''__(Required)__''}}:\\
\\
__Authorization URL__: It is the endpoint where IdP initiates the authentication and authorization process. The default configuration would be:\\
{{{
{authorization_endpoint}?client_id={oidc_client_id}&response_type=code&scope={oidc_scope}&redirect_uri={oidc_redirect_url}&state={oidc_state}
}}}\\
\\
Variables:\\
• {authorization_endpoint}: Authorization URL of IdP, retrieved from the OpenID Configuration JSON.\\
• {oidc_client_id}: Client ID assigned by the IdP during app registration. Retrieved from plugin's "Client ID" setting.\\
• {oidc_scope}: Specifies the "Scope"(s) provided by the plugin to determine the level of access.\\
• {oidc_redirect_url}: An autogenerated URL by CrushFTP, composed of the initial host and port, followed by __/SSO_IDC/__. This URL is used to redirect the user after successful authentication. __!!! It must exactly match the redirect URL registered and configured in the IdP.__\\
• {oidc_state}: An autogenerated value by CrushFTP to maintain the state between the authentication request and callback. This is used to prevent CSRF attacks. \\
\\
__Scope__: It defines the permissions or access levels requested by CrushFTP during the authentication process. The scopes determine the type of information (claims) IdP will include in the ID token and what resources the client application can access. (like user profile information, email address, and cloud storage access). Commonly supported scope values include:\\
{{{
openid profile email
}}}
\\
__Scope Suggestions__: Displays possible scope values based on the OpenID configuration data.\\
\\
__Get Refresh Token__: It is used for access the user's cloud storage through the IdP. It adjusts the __Authorization URL__ by appending the following parameters:\\
{{{
access_type=offline&prompt=consent
}}}\\
\\
• The __access_type=offline__ parameter is used in the Authorization URL in OpenID Connect (OIDC) and OAuth 2.0 flows to request a refresh token from the IdP. A refresh token allows the application to obtain new access tokens without requiring the user to log in again, enabling offline access.\\
__The refresh token enables access to the user's cloud storage through the IdP. __CrushFTP supports cloud storage integration with services such as Google Drive ([GDriveSetup]), OneDrive ([OneDriveSetup]), SharePoint ([SharePoint Integration]), and Dropbox ([Dropbox Integration]).\\
\\
When integrating cloud storage, ensure the __"Scope"__ parameter includes the __necessary permissions for accessing the user's cloud storage__. Add the following scopes for the respective services:\\
{{{
Google: https://www.googleapis.com/auth/drive
Dropbox: files.metadata.write files.content.write files.content.read
}}}\\
\\
__Microsoft Azure App Registration__ does not require additional scopes for this purpose. Ensure the __App Registration__ includes the __"Files.ReadWrite.All"__ permission, configured as either Delegated or Application. More info at [SharePoint Integration].\\
\\
At "__Custom VFS__" settings you can reference the gained __refresh token__ as variable:
{{{
{oidc_refresh_token}
}}}
\\
• The __prompt=consent__ parameter is used in the authorization URL to explicitly request the user's consent during the authentication process. This parameter __ensures that the Identity Provider (IdP) displays a consent screen__, even if the user has previously authorized the application.\\
\\
__Verify ID Token:__ The Authorization Code Flow uses the code value returned by the IdP to obtain the ID token. Although this step is not mandatory in the OpenID protocol, you can enable an additional verification of the returned ID token by selecting this checkbox. __!!!__ This feature works only if the OpenID configuration includes the "__jwks_uri__" endpoint. __It provides an extra layer of validation for the ID token.__\\
\\
!2.1.4 IdP User endpoint:\\
\\
__Check User Endpoint URL?__: This option enables CrushFTP to retrieve additional information about the user from the IdP via the "__user_info__" endpoint URL. __!!!__ This feature only works if the OpenID configuration includes a "userinfo_endpoint" URL or if you manually specify it in the "__User Endpoint URL__" input field. \\
\\
The __"userinfo_endpoint"__ is a key component of the OpenID Connect (OIDC) protocol, providing a standardized way to __retrieve additional user information from the IdP__ after authentication. It complements the information included in the ID token by allowing the client application to fetch more detailed and up-to-date user attributes.\\
\\
__Special Case for Microsoft Azure AD:__ When using __Microsoft Azure AD__ as the Identity Provider (IdP), a specific user endpoint is required to retrieve group information for the authenticated user:\\
{{{
https://graph.microsoft.com/v1.0/me
}}}
In this scenario, the plugin makes __an additional API call to this endpoint__ to fetch the user's __group membership__ details. The App registration must include the __Group.Read.All__ permission to enable access to group information.\\
\\
__Revocation Endpoint URL__: The revocation endpoint is an __optional endpoint__ in OIDC and OAuth 2.0 that allows client applications to __revoke access tokens and refresh tokens issued by the IdP__. Revoking a token ensures that it can no longer be used to access protected resources or obtain new tokens.\\
\\
__Refresh Token__: The refresh token will be revoked at the __end of the CrushFTP session__.\\
__Access Token__:\\
- If __no refresh token is retrieved__, the access token will be revoked during __the plugin authentication process__.\\
- If a __refresh token is present__, only the refresh token will be revoked, as __revoking the access token inherently invalidates any associated refresh tokens sent by the IdP__.\\
\\
!2.1.6 Claim and IdP session related configs:\\
\\
__Claim as Username__ {{''__(Required)__''}}: Specify the name of the claim within the IdP's response that should be used as the __username for the CrushFTP session__.
\\
__!!!__ If this claim is not present or its value is missing in the IdP's response (either within the ID Token or retrieved from the user endpoint), __the authentication will fail due to a missing username__.\\
\\
__Claim Suggestions__: Displays possible claim values based on the OpenID configuration data.\\
\\
__End Session URL__: This URL is called at __the end of the CrushFTP session__ to terminate the user's session. You can use the "end_session_endpoint" provided in the OpenID configuration data by referencing it as the variable __{end_session_endpoint}__, or you can specify the URL manually.\\
\\
!!2.2 CrushFTP related plugin settings:\\
\\
[CrushOIDC/oidc_general_plugin_settings.png]\\
\\
__Enable__: Activate the plugin. {{''__(Required)__''}}\\
__Debug__: Enable detailed logging of plugin activities. This helps troubleshoot issues. Set the debug level to 1 and at "Log File Options" check the flag "GENERAL" (see [Logging]).\\
__Allowed Servers/Groups__: Each plugin instance can restrict the allowed users to certain Server Ports or Sever Connection Groups (see [IP Servers]). To deselect the currently selected option, use __ALT + Click__ (or __⌥ + Click__ on macOS).\\
\\
[CrushOIDC/oidc_crushftp_related_settings.png]\\
\\
!2.2.1 Login Button {{''__(Required)__''}}:\\
\\
__Login button text__: Specify the text to display on the login button. This button will only be visible on the designated "Server Port."(allowed at "Allowed Servers/Groups") Users can authenticate through multiple Identity Providers by configuring multiple CrushOIDC plugin instances. Like:\\
[CrushOIDC/oidc_login_buttons.png]\\
\\
!2.2.2 Username matching {{''__(Required)__''}}:\\
\\
It filters usernames based on the value configured in __"Username matching"__. The default value (*) allows all users. Multiple values can be specified, separated by commas. Domain filtering is also supported (Like: *mydomain.com).\\
\\
IdPs that do not support tenant-based app registrations generally use a global, centralized app registration model. In such cases, applications are registered once and are not tied to a specific tenant or organizational boundary. To manage access effectively, domain filtering is often necessary (Like: Google, Dropbox).
\\
!2.2.3.1 Skip OTP processing:\\
\\
CrushOIDC plugin is not compatible with [OTP Settings], as the IdP may implement its own two-factor authentication. Enabling this flag will exclude plugin users from CrushFTP's OTP process.
\\
!2.2.3.2 Remove email suffix from username:\\
\\
It removes the email suffix from the username. For example, the username "my_user@email.com" will be transformed to "my_user".\\
\\
!2.2.4 OpenID/OAuth only used for Authentication:\\
\\
It is useful when user accounts are already defined and managed within CrushFTP's [User Manager], you can leverage the CrushOIDC plugin to authenticate users against external Identity Providers. This allows existing users to utilize OIDC for login while maintaining their existing user accounts and access privileges as defined within CrushFTP.\\
\\
!2.2.5 User Templates {{''__(Required)__''}}:\\
\\
__Template Username__: The signed-in user inherits both the settings and the VFS items(as Linked [VFS]). __It must have a value!__\\
__Import settings from CrushFTP user__: The signed-in user inherits only the settings from the specified user. __It must have a value!__\\
\\
__Default value__: default (the default user of CrushFTP)\\
\\
!2.2.6 Roles:\\
\\
__Authentication aspect__: Permit users based on specific IdP claims. \\
\\
__!!! Important__: If roles are configured and the IdP's user does not match any of the predefined roles, the authentication will be rejected due to the absence of matching roles.\\
\\
__Template User Aspect__: You can configure different Template Users (see 2.2.5 User Templates) based on IdP claims. If a template user is specified, the signed-in user inherits both the settings and the VFS items (as Linked [VFS]).\\
__!!! Important__: Template user must exist in the [User Manager], otherwise, it will have no effect.\\
\\
__IdP Attribute Value__ -> Supports different types of matching:\\
• __Exact Match__: Matches the value exactly as provided.\\
• __Simple Match__: Use patterns like __*mail.com*__ to match substrings.\\
• __Regex Match__: Use the format __REGEX:<<your-regular-expression>>__ for more complex patterns.\\
\\
Role examples :
{{{
<<IDP attribute name>>=<<IDP attribute value>> : << the template user name>>
or multiple values separated by a comma
<<IDP attribute name>>=<<IDP attribute value>>,<<IDP attribute name>>=<<IDP attribute value>> : << the template user name>>
Like:
groups=Azure_SAML : temp_OIDC_azure_user
or
groups=*SAML*
or
groups=REGEX:.*SAML$
or
groups=Azure_SAML,groups:test_group_one
or
groups=*SAML*,groups:test_group_one
or
groups=REGEX:.*SAML$,groups:test_group_one
}}}
\\
If the attribute value is an array, you can reference only one element for an exact match. Example: If the IDP attribute value is __:\\
{{{
[groups:"group1", "group2"] -> you can match with "group1".
}}}\\
\\
!2.2.7 Custom VFS {{''__(Required Under Specific Conditions)__''}}:
\\
[VFS] related settings. You can configure a custom [VFS] for CrushOIDC users.\\
__!!! Important:__ If the CrushOIDC user has no assigned VFS, __authentication will be rejected due to the absence of an assigned [VFS]__. CrushOAIDC user can inherit VFS configuration from:\\
• Template User (see at __2.2.5 User Templates__)\\
• Roles (Like at __2.2.6 Roles__)\\
• Custom VFS\\
\\
Custom VFS example using plugin settings and refresh token from OpenID connect:\\
{{{
GDrive: gdrive://{oidc_client_id}~{oidc_client_secret_decoded}:{oidc_refresh_token}@www.google.com/
OneDrive: onedrive://{oidc_client_id}~{oidc_client_secret_encoded}:{oidc_refresh_token}@graph.microsoft.com/
DropBox: dropbox://{oidc_client_id}~{oidc_client_secret_decoded}:{oidc_refresh_token}@api.dropboxapi.com/
}}}\\
\\
!3. DMZ\\
\\
[CrushOIDC/oidc_dmz_plugin_settings.png]\\
\\
The DMZ's CrushOIDC plugin has a slightly different UI because IdP user validation is handled exclusively on the internal node. To function properly, the __DMZ must replicate the internal node's settings__ for the following parameters:\\
\\
• Plugin name\\
• OpenID Configuration URL\\
• Client ID\\
• Client Secret (Optional): Only if it is required for the authorization url.\\
• Authorization URL\\
• Scope\\
• Get Refresh Token\\
• Login button text\\
\\
Version Date Modified Size Author Changes ... Change note
295 10-Jan-2025 02:22 16.941 kB krivacsz to previous
294 10-Jan-2025 02:12 16.94 kB krivacsz to previous | to last
293 10-Jan-2025 02:04 16.917 kB krivacsz to previous | to last
292 10-Jan-2025 02:01 16.886 kB krivacsz to previous | to last
291 09-Jan-2025 23:55 16.877 kB krivacsz to previous | to last
290 09-Jan-2025 23:50 16.717 kB krivacsz to previous | to last
289 09-Jan-2025 23:45 16.543 kB krivacsz to previous | to last
288 09-Jan-2025 23:39 16.386 kB krivacsz to previous | to last
287 09-Jan-2025 23:38 16.383 kB krivacsz to previous | to last
286 09-Jan-2025 23:35 16.361 kB krivacsz to previous | to last
285 09-Jan-2025 23:27 16.349 kB krivacsz to previous | to last
284 09-Jan-2025 23:26 16.349 kB krivacsz to previous | to last
283 09-Jan-2025 23:24 16.346 kB krivacsz to previous | to last
282 09-Jan-2025 23:23 16.348 kB krivacsz to previous | to last
281 09-Jan-2025 23:22 16.342 kB krivacsz to previous | to last
« This page (revision-295) was last changed on 10-Jan-2025 02:22 by krivacsz
G’day (anonymous guest)
CrushFTP11 | What's New

Referenced by
CrushOAuth
LeftMenu

JSPWiki