Skip to content

Conversation

@jeremydhoon
Copy link

@jeremydhoon jeremydhoon commented Oct 31, 2025

Add support for N-Able Passportal

This PR adds authentication support for Passportal, a tool for IT teams to manage privileged access securely ("Passportal™ empowers safe, privileged access management across your devices, networks, and applications while helping you create, manage, and automate strong credentials.").

Passportal's API requires a two-step authentication process, in which the user exchanges an HMAC token and some of the HMAC parameters for an access token.

The PR includes the two-step auth provider details, as well as documentation and assets.

Successful authentication
Here's a screen recording showing that authentication succeeds only when parameters are correct.

Connection detail page (blurred raw token response omitted):

Screenshot 2025-10-31 at 13 34 11

Connect documentation
Screenshot 2025-10-31 at 12 04 53

Screenshot 2025-10-31 at 12 05 02 Screenshot 2025-10-31 at 12 05 08

Primary documentation

Screenshot 2025-10-31 at 12 07 24

Add first-class N-Able Passportal integration with two-step HMAC auth

This PR introduces native support for N-Able Passportal vaults. It adds a new provider definition, wires it into the existing two-step authentication framework, and ships the associated documentation and brand assets. The change is purely additive—no existing APIs, schema, or runtime logic are altered—allowing users who manage secrets in Passportal to connect their vaults to the platform without custom scripting.

Key Changes

• Added Passportal provider entry to packages/providers/providers.yaml (defines required Client ID, Secret Key, API Key, Public Key fields)
• Auto-registered provider in the Two-Step Auth engine to enable immediate use across UI, CLI, and API
• Added passportal.svg brand asset and catalogue metadata for marketplace visibility
• Published full documentation set (overview, connection guide, code snippets) and registered it in docs/docs.json

Affected Areas

• providers manifest (packages/providers/providers.yaml)
• Two-Step Auth engine registration
• Documentation tree
• Static assets / integration catalogue


This summary was automatically generated by @propel-code-bot

Copy link
Contributor

@hassan254-prog hassan254-prog left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the contribution, small comments inline otherwise looks good.

content: ${credentials.content}
token_response:
token: access_token
token_expiration: data.expiry_time
Copy link
Contributor

@hassan254-prog hassan254-prog Oct 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
token_expiration: data.expiry_time
token_expiration: expiry_time

You can verify this by checking the Access Token Expiration under connection in the Nango dashboard. I would also check if the token refreshes when you manually refresh from nango ui.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. token_expiration: expiry_time is indeed correct.

Unfortunately I can't find a control in the Nango UI to manually refresh, but the expiry time does actually show up now.

Screenshot 2025-11-01 at 20 48 36

example: mycompany.mypasswordapp.com
format: hostname
doc_section: '#step-1-find-your-passportal-base-url'
credentials:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to a add an example and pattern for both apiKey and hmacToken.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call. I've added these.

token_expiration: data.expiry_time
token_expiration_strategy: expireAt
proxy:
base_url: https://${connectionConfig.base_url}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the base_url always have a suffix passportalmsp.com, if so you can just request for the subdomain instead. with prefix: https:// and suffix : passportalmsp.com

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately the base_url is not constrained to a single suffix; Passportal's documentation shows a different suffix to our domain's suffix.

Comment on lines 24 to 25
- If your URL is `https://mycompany.passportalmsp.com/dashboard` → Your base URL is `mycompany.passportalmsp.com`
- If your URL is `https://instance.passportalmsp.com/dashboard` → Your instance is `instance.passportalmsp.com`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Log into your Passportal dashboard, check the URL at your browser address bar, If your URL is https://mycompany.passportalmsp.com/dashboard → Your Base URL is mycompany.passportalmsp.com
This will depend on the comment below.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice re-wording. This is indeed consistent with the correct, full-base-URL approach we need to take here. I have adopted the suggestion.


### Step 4: Enter your details in the Connect UI

Once you have your **Instance Name**, **API Access Key ID**, **HMAC Token**, and **Content String**:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn’t match the Connect UI form fields. To be determined based on the comment regarding base_url vs. subdomain.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you. This has been made consistent, including a consistent order between fields in the docs and fields in the connect modal form.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the logo should have a maximum width or height of 44px and be centered within a 62x62px container.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If Claude Code is to be believed, the SVG should now meet these requirements.


1. Log into your Passportal dashboard.
2. In the left pane, go to **Settings** > **API Keys**.
<img src="/integrations/all/passportal/passportal-settings.png" style={{maxWidth: "450px" }}/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<img src="/integrations/all/passportal/passportal-settings.png" style={{maxWidth: "450px" }}/>
<img src="/integrations/all/passportal/passportal-settings.png"/>

same as the rest.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've removed the style={{...}} attributes.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we have a new docs style,take a look at Sellsy (Client Credentials) as an example.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have moved to this new style.

To authenticate with Passportal, you need:
1. **Base URL** – Your Passportal instance domain (e.g., `mycompany.passportalmsp.com`).
2. **API Access Key ID** – Your Passportal API Access Key ID.
3. **HMAC Token** – A pre-generated HMAC-SHA256 hash token (base64 encoded).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Documentation]

Factual inconsistency: Earlier steps create a hexadecimal HMAC hash, but this line says the token is base-64 encoded. Update to the correct encoding.

Context for Agents
[**Documentation**]

Factual inconsistency: Earlier steps create a hexadecimal HMAC hash, but this line says the token is base-64 encoded. Update to the correct encoding.

File: docs/integrations/all/passportal/connect.mdx
Line: 11

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We say "hexadecimal" or "hex" now.


**Important**: The Secret access key is only viewable once in the Create access key dialog. After closing this dialog, it cannot be retrieved again.

<img src="/integrations/all/passportal/api-keys.png" style={{maxWidth: "450px" }}/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Documentation]

Broken image path: File added is "passportal-api-keys.png" but the source here points to "api-keys.png". Update the filename or path so the image loads.

Context for Agents
[**Documentation**]

Broken image path: File added is "passportal-api-keys.png" but the source here points to "api-keys.png". Update the filename or path so the image loads.

File: docs/integrations/all/passportal/connect.mdx
Line: 40

@jeremydhoon
Copy link
Author

Thanks @hassan254-prog -- I've done my best to address your thoughtful comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants