diff --git a/docs/ai-policy.md b/docs/ai-policy.md index 002b13318d301..7c3191260b10f 100644 --- a/docs/ai-policy.md +++ b/docs/ai-policy.md @@ -57,7 +57,7 @@ When posting content that was generated or significantly assisted by AI tools, y Include a disclosure statement such as: - "This response was generated with assistance from [AI tool name] and validated against SailPoint documentation." -- "AI-assisted response - verified against my personal experience with SHF." +- "AI-assisted response - verified against my personal experience with SailPoint Identity Security." - "Generated using [AI tool name] and tested in my sandbox environment." Place the disclosure at the beginning or end of your post in a clear, visible manner. @@ -119,7 +119,7 @@ When AI provides information, you must: - Request sources from the AI tool - Verify those sources exist and are accurate -- Include citations in your post (e.g., "According to the SHF API documentation page X…") +- Include citations in your post (e.g., "According to the SailPoint Identity Security API documentation page X…") - Link to official documentation when available **Do not:** @@ -173,7 +173,7 @@ When AI provides information, you must: **Example 1: Code Solution with Context** ```text -AI-assisted response - validated in my SHF sandbox +AI-assisted response - validated in my SailPoint Identity Security sandbox Based on the requirement to transform account data, here's an approach using a transform. I used AI to help structure the JSON, then tested @@ -185,7 +185,7 @@ Note: This worked in my tenant but you may need to adjust the attribute mappings based on your source schema. The key is ensuring the input attribute exists before the transform runs. -Reference: SHF Transform Documentation - [link] +Reference: SailPoint Identity Security Transform Documentation - [link] ``` **Example 2: Research Assistance** @@ -233,7 +233,7 @@ all generic, just to accumulate points] **Best practices when using external AI tools:** 1. **Be specific in your prompts** - - Include SailPoint product names (SHF, IIQ, File Access Manager, etc.) + - Include SailPoint product names (SailPoint Identity Security, IIQ, File Access Manager, etc.) - Mention version numbers when relevant - Provide context about your use case diff --git a/docs/api/api-specifications.md b/docs/api/api-specifications.md index 818f6061582f5..a977ada4659f2 100644 --- a/docs/api/api-specifications.md +++ b/docs/api/api-specifications.md @@ -6,14 +6,14 @@ sidebar_label: API Specifications sidebar_position: 1 sidebar_class_name: apiSpecifications keywords: ['api', 'specifications'] -description: SailPoint Human Fabric API specifications. +description: SailPoint Identity Security API specifications. slug: /api/api-specifications tags: ['API Specifications'] --- ## Overview -The SailPoint Human Fabric (SHF) APIs provide developers with a way to interact with the SHF platform and extend it. Developers can leverage these APIs to customize their platform experiences and build new solutions and integrations that meet their needs. +The SailPoint Identity Security APIs provide developers with a way to interact with the platform and extend it. Developers can leverage these APIs to customize their platform experiences and build new solutions and integrations that meet their needs. The API specifications contain detailed information of how to send requests to each API endpoint, as well as example requests and responses. They also include essential information about how to use the APIs and guides you can follow to get started. @@ -26,6 +26,6 @@ import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; ## Discuss -The most valuable resource for SHF developers is the SailPoint Developer Community itself, where SHF users and experts all over the world come together to ask questions and provide solutions. +The most valuable resource for SailPoint Identity Security developers is the SailPoint Developer Community itself, where users and experts all over the world come together to ask questions and provide solutions. -To learn more about the SHF APIs and discuss them with SailPoint Developer Community members, go to the [SailPoint Developer Community Forum](https://developer.sailpoint.com/discuss/tags/c/isc/6/apis). --> +To learn more about the SailPoint Identity Security APIs and discuss them with SailPoint Developer Community members, go to the [SailPoint Developer Community Forum](https://developer.sailpoint.com/discuss/tags/c/isc/6/apis). --> diff --git a/docs/api/api-versioning-migration.md b/docs/api/api-versioning-migration.md index 67ba7b31e9a5a..ae081d2b49f36 100644 --- a/docs/api/api-versioning-migration.md +++ b/docs/api/api-versioning-migration.md @@ -1,12 +1,12 @@ --- id: api-versioning-migration -title: Migration guide for SHF APIs to new versioning model. +title: Migration guide for SailPoint Identity Security APIs to new versioning model. pagination_label: API Versioning Migration sidebar_label: API Versioning Migration sidebar_position: 8 sidebar_class_name: apiVersioning keywords: ['api', 'versioning', 'announcement'] -description: Migration guide for SHF APIs to new versioning model. +description: Migration guide for SailPoint Identity Security APIs to new versioning model. slug: /api/api-versioning-migration tags: ['API Versioning Strategy'] --- @@ -14,7 +14,7 @@ tags: ['API Versioning Strategy'] import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -We have made a significant update to how SailPoint Human Fabric APIs are versioned. This document outlines what changed, why we made these changes, how to migrate to the new API versioning system, and what they mean for you as an API consumer or integration developer. +We have made a significant update to how SailPoint Identity Security APIs are versioned. This document outlines what changed, why we made these changes, how to migrate to the new API versioning system, and what they mean for you as an API consumer or integration developer. ## What Has Changed diff --git a/docs/api/api-versioning-strategy.md b/docs/api/api-versioning-strategy.md index 2c2645ec52959..6177ef1845c9e 100644 --- a/docs/api/api-versioning-strategy.md +++ b/docs/api/api-versioning-strategy.md @@ -6,12 +6,12 @@ sidebar_label: API Versioning Strategy sidebar_position: 7 sidebar_class_name: apiVersioning keywords: ['api', 'versioning'] -description: SailPoint Human Fabric API Versioning Strategy. +description: SailPoint Identity Security API Versioning Strategy. slug: /api/api-versioning-strategy tags: ['API Versioning Strategy'] --- -SailPoint Human Fabric (SHF) REST APIs follow true semantic versioning, where each service is versioned independently. A service's major version only increments when its core usage contract changes. This gives you a stable, predictable integration target: as long as a version's contract is unchanged, your integrations continue to work without modification. +SailPoint Identity Security REST APIs follow true semantic versioning, where each service is versioned independently. A service's major version only increments when its core usage contract changes. This gives you a stable, predictable integration target: as long as a version's contract is unchanged, your integrations continue to work without modification. When breaking changes are required, a new major version is released in parallel and the previous version enters a clearly defined deprecation schedule on its own timeline. Services are documented once and maintained in place, rather than duplicated across yearly releases. @@ -23,7 +23,7 @@ SailPoint's API versioning process is subject to change at any time. SailPoint w ## How versioning works -Each SHF service is versioned independently using a URL structure that follows this pattern: +Each SailPoint Identity Security service is versioned independently using a URL structure that follows this pattern: ``` /service/v1/action @@ -115,7 +115,7 @@ Individual API versions may be deprecated at any time. The term "deprecation" me ### Announcements -Communications will be sent out to notify impacted users of any deprecations. These communications may appear in the Admin page of the SailPoint Human Fabric UI, in the [Announcements](https://developer.sailpoint.com/discuss/c/announcements/14) category, in Compass, or in newsletters or emails. +Communications will be sent out to notify impacted users of any deprecations. These communications may appear in the Admin page of the SailPoint Identity Security UI, in the [Announcements](https://developer.sailpoint.com/discuss/c/announcements/14) category, in Compass, or in newsletters or emails. ### API specification diff --git a/docs/api/authentication.md b/docs/api/authentication.md index 76934fcfc8c3e..394237b393274 100644 --- a/docs/api/authentication.md +++ b/docs/api/authentication.md @@ -6,7 +6,7 @@ sidebar_label: Authentication sidebar_position: 2 sidebar_class_name: authentication keywords: ['authentication'] -description: Authenticate to the SHF APIs. +description: Authenticate to the SailPoint Identity Security APIs. slug: /api/authentication tags: ['Authentication'] --- @@ -15,7 +15,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; ## Overview -With SailPoint Human Fabric (SHF) APIs, you can extend your SHF platform far beyond its current capabilities. To be able to do so, you must first authenticate to the SHF APIs. Authentication is the act of validating a user's identity, generally by passing some kind of credentials. A fast, simple way to authenticate to the APIs is to generate a [personal access token](#generate-a-personal-access-token) and pass that token. +With SailPoint Identity Security APIs, you can extend your platform far beyond its current capabilities. To be able to do so, you must first authenticate to the SailPoint Identity Security APIs. Authentication is the act of validating a user's identity, generally by passing some kind of credentials. A fast, simple way to authenticate to the APIs is to generate a [personal access token](#generate-a-personal-access-token) and pass that token. If the PAT is valid, the API responds with a JSON Web Token (JWT) `access_token` that you can provide to authorize your API requests. Authorization is the act of validating the user's permission to access a given resource. A successful API request must include the `access_token` in the `Authorization` request header. @@ -29,14 +29,14 @@ This diagram shows the flow of this authentication/authorization process: sequenceDiagram autonumber participant H as HTTP Client - participant I as SailPoint Human Fabric + participant I as SailPoint Identity Security H->>I: Access Token Request I->>H: Access Token Response loop Until token expires H->>I: API Request + Access Token - I->>H: SailPoint Human Fabric API Response + I->>H: SailPoint Identity Security API Response end ``` @@ -44,20 +44,20 @@ sequenceDiagram The flow involves these four key steps: -1. **Access Token Request**: The HTTP client (a script, application, Postman, cURL, etc.) makes a request to SHF to get a JWT `access_token`. -2. **Access Token Response**: If the request is valid, SHF responds to the HTTP client with a JWT `access_token`. -3. **API Request**: The HTTP client makes a request to an SHF endpoint with the header, `Authorization: Bearer {access_token}`. -4. **API Response**: If both the request itself and the JWT `access_token` in its header are valid, SHF responds to the client. If you encounter unexpected errors, refer to the [Troubleshooting](#troubleshooting) section of this document. +1. **Access Token Request**: The HTTP client (a script, application, Postman, cURL, etc.) makes a request to SailPoint Identity Security to get a JWT `access_token`. +2. **Access Token Response**: If the request is valid, SailPoint Identity Security responds to the HTTP client with a JWT `access_token`. +3. **API Request**: The HTTP client makes a request to a SailPoint Identity Security endpoint with the header, `Authorization: Bearer {access_token}`. +4. **API Response**: If both the request itself and the JWT `access_token` in its header are valid, SailPoint Identity Security responds to the client. If you encounter unexpected errors, refer to the [Troubleshooting](#troubleshooting) section of this document. -The idea is that once you have authenticated to the SHF APIs and you have received an `access_token`, you can use that `access_token` to provide authorization for your API requests. +The idea is that once you have authenticated to the SailPoint Identity Security APIs and you have received an `access_token`, you can use that `access_token` to provide authorization for your API requests. This document includes all the information you need to know to engage in this authentication/authorization process, as well as a guide on how to get started. ## Get started -Read this guide to learn how to authenticate to SailPoint's SHF APIs. +Read this guide to learn how to authenticate to SailPoint Identity Security APIs. -To authenticate to the SHF APIs, you must be able to connect to your tenant to send the access token request. To do so, you need to do the following: +To authenticate to the SailPoint Identity Security APIs, you must be able to connect to your tenant to send the access token request. To do so, you need to do the following: 1. [Find your tenant's OAuth details](#find-your-tenants-oauth-details) 2. [Generate personal access token](#generate-a-personal-access-token) @@ -68,12 +68,12 @@ To authenticate to the SHF APIs, you must be able to connect to your tenant to s Your tenant's OAuth details refer to the details you need to know to connect it to the APIs. You need to know your tenant's name, its `authorizeEndpoint` URL, and its `tokenEndpoint` URL. -Your SHF instance is likely using the domain name supplied by SailPoint (`[tenant].api.identitynow.com`), in which case, the tenant name is in the URL. This is assumed to be the case in this guide. -However, if your SHF instance is using a vanity URL, you must enter this URL into your browser to get your OAuth info: `https://[tenant].api.identitynow.com/oauth/info` +Your SailPoint Identity Security instance is likely using the domain name supplied by SailPoint (`[tenant].api.identitynow.com`), in which case, the tenant name is in the URL. This is assumed to be the case in this guide. +However, if your SailPoint Identity Security instance is using a vanity URL, you must enter this URL into your browser to get your OAuth info: `https://[tenant].api.identitynow.com/oauth/info` If you have admin access but don't know your tenant name, you can learn it by following these steps: -1. Log into your SHF instance. +1. Log into your SailPoint Identity Security instance. 2. Select the 'Dashboard' dropdown. 3. Select 'Overview'. 4. Find the tenant name ('Org Name') in the dashboard's `Org Details` section. @@ -111,9 +111,9 @@ You can use the `authorizeEndpoint` and `tokenEndpoint` URLs from your tenant to A personal access token (PAT) is a method of authenticating to an API as a user without providing a username and password. PATs are primarily used in scripts or programs that lack an easy way to implement an OAuth2 flow but need to call API endpoints that require user context. PATs are also convenient for use in tools like [Postman](https://www.postman.com/) when you are exploring and testing the APIs. -Any SHF user can generate a PAT. To do so, follow these steps: +Any SailPoint Identity Security user can generate a PAT. To do so, follow these steps: -1. Select **Preferences** from the drop-down menu under your username, then **Personal Access Tokens** on the left. You can also go directly to the page by using this URL (replace `[tenant]` with your SailPoint Human Fabric tenant): `https://[tenant].identitynow.com/ui/d/user-preferences/personal-access-tokens` +1. Select **Preferences** from the drop-down menu under your username, then **Personal Access Tokens** on the left. You can also go directly to the page by using this URL (replace `[tenant]` with your SailPoint Identity Security tenant): `https://[tenant].identitynow.com/ui/d/user-preferences/personal-access-tokens` 2. Click **New Token** and enter a meaningful description to help differentiate the token from others. @@ -142,7 +142,7 @@ Once you have created the PAT and you know its `Client ID` and `Client Secret`, There are several different authorization flows that OAuth 2.0 supports, and each has a grant-type defining its different use cases. You must choose the one that best serves your purposes. This document covers these three common flows: 1. [**Client Credentials**](https://oauth.net/2/grant-types/client-credentials/) - Clients use this grant type to obtain a JWT `access_token` without user involvement such as scripts, programs or system to system integration. -2. [**Authorization Code**](https://oauth.net/2/grant-types/authorization-code/) - Clients use this grant type to exchange an authorization code for an `access_token`. Authorization codes are mainly used by web applications because there is a login into SHF with a subsequent redirect back to the web application/client. +2. [**Authorization Code**](https://oauth.net/2/grant-types/authorization-code/) - Clients use this grant type to exchange an authorization code for an `access_token`. Authorization codes are mainly used by web applications because there is a login into SailPoint Identity Security with a subsequent redirect back to the web application/client. 3. [**Refresh Token**](https://oauth.net/2/grant-types/refresh-token/) - Clients use this grant type to exchange a refresh token for a new `access_token` when the existing `access_token` has expired. This allows clients to continue using the APIs without having to re-authenticate as frequently. This grant type can only be used together with `Authorization Code` to prevent a user from having to log in several times per day. One way to determine which authorization flow you need to use is to look at the specification for the endpoint you want to use. The endpoint will have the supported OAuth flows listed under the 'Authorization' dropdown, like the [List Access Profiles endpoint](https://developer.sailpoint.com/docs/api/list-access-profiles-v-1): @@ -157,9 +157,9 @@ The guide will detail the three different authorization grant flows you can use Clients use the 'Client Credentials' grant type to obtain access tokens without user involvement. This is the simplest authentication flow. -API endpoints that require [user level permissions](https://documentation.sailpoint.com/saas/help/common/users/user_level_matrix.html) require the use of Personal access tokens (PATs). Correspondingly, the endpoints a personal access token (PAT) can call depends on the permissions of the user who generated it and the configuration of SHF. +API endpoints that require [user level permissions](https://documentation.sailpoint.com/saas/help/common/users/user_level_matrix.html) require the use of Personal access tokens (PATs). Correspondingly, the endpoints a personal access token (PAT) can call depends on the permissions of the user who generated it and the configuration of SailPoint Identity Security. -Note: If an API Key is used then SHF API calls are made outside of the context of a user and some API calls will not work. +Note: If an API Key is used then SailPoint Identity Security API calls are made outside of the context of a user and some API calls will not work. An OAuth 2.0 client using the client credentials grant flow must have `CLIENT_CREDENTIALS` as one of its grantTypes (PATs are implicitly granted the `CLIENT_CREDENTIALS` grant type): @@ -180,7 +180,7 @@ An OAuth 2.0 client using the client credentials grant flow must have `CLIENT_CR This is the overall authorization flow: -1. The client first submits an OAuth 2.0 token request to SHF in this form: +1. The client first submits an OAuth 2.0 token request to SailPoint Identity Security in this form: ```text POST https://[tenant].api.identitynow.com/oauth/token @@ -217,7 +217,7 @@ curl --location 'https://[tenant].api.identitynow.com/oauth/token' \ --form 'client_secret="{clientSecret}"' ``` -2. SHF validates the token request and responds. If the request is successful, the response contains a JWT access token. For more information about the JWT access token in the response, refer to [#OAuth-token-response](#oauth-token-response). +2. SailPoint Identity Security validates the token request and responds. If the request is successful, the response contains a JWT access token. For more information about the JWT access token in the response, refer to [#OAuth-token-response](#oauth-token-response). Once you have the JWT access token, you can pass the token as a basic "Authorization" header in your requests using the OAuth endpoints. @@ -227,7 +227,7 @@ To learn more about the OAuth client credentials grant flow, refer [here](https: Further Reading: [https://oauth.net/2/grant-types/authorization-code/](https://oauth.net/2/grant-types/authorization-code/) -Clients use this grant type to exchange an authorization code for an `access_token`. This is mainly used for web apps because there is a login into SHF with a subsequent redirect back to the web app/client. +Clients use this grant type to exchange an authorization code for an `access_token`. This is mainly used for web apps because there is a login into SailPoint Identity Security with a subsequent redirect back to the web app/client. The OAuth 2.0 client you are using must have `AUTHORIZATION_CODE` as one of its grant types. The redirect URLs must also match the list in the client as well: @@ -261,7 +261,7 @@ sequenceDiagram autonumber participant U as User participant W as Web App - participant I as SailPoint Human Fabric + participant I as SailPoint Identity Security U->>W: Click login link W->>I: Authorization request to https://[tenant].login.sailpoint.com/oauth/authorize @@ -278,19 +278,19 @@ This is the overall authorization flow: 1. The user clicks the login link on a web app. -2. The web app sends an authorization request to SHF in this form: +2. The web app sends an authorization request to SailPoint Identity Security in this form: ```Text GET https://[tenant].login.sailpoint.com/oauth/authorize?client_id={client-id}&response_type=code&redirect_uri={redirect-url} ``` -3. SHF redirects the user to a login prompt to authenticate to SailPoint Human Fabric. +3. SailPoint Identity Security redirects the user to a login prompt to authenticate. -4. The user authenticates to SHF. +4. The user authenticates to SailPoint Identity Security. -5. Once authentication is successful, SHF issues an authorization code back to the web app. +5. Once authentication is successful, SailPoint Identity Security issues an authorization code back to the web app. -6. The web app submits an OAuth 2.0 token request to SHF in this form: +6. The web app submits an OAuth 2.0 token request to SailPoint Identity Security in this form: ```text POST https://[tenant].api.identitynow.com/oauth/token?grant_type=authorization_code&client_id={client-id}&code={code}&redirect_uri={redirect-url} @@ -302,7 +302,7 @@ The token endpoint URL is `[tenant].api.identitynow.com`, and the authorize URL ::: -7. SHF validates the token request and submits a response. If the request is successful, the response contains a JWT `access_token`. For more information about the JWT access token in the response, refer to [#OAuth-token-response](#oauth-token-response). +7. SailPoint Identity Security validates the token request and submits a response. If the request is successful, the response contains a JWT `access_token`. For more information about the JWT access token in the response, refer to [#OAuth-token-response](#oauth-token-response). These are the query parameters in the OAuth 2.0 token request for the authorization code grant: @@ -345,7 +345,7 @@ These are the steps: `redirect_uri=https://developer.sailpoint.com/sailapps`, `code_challenge_method=S256`, and the `state`. -3. The user signs in. Identity Security Cloud redirects the browser to the page +3. The user signs in. SailPoint Identity Security redirects the browser to the page with `code` and `state` in the query string. 4. The page removes the query string from the address bar, and it displays one @@ -407,13 +407,13 @@ This is the overall authorization flow: 1. The client application receives an `access_token` and a `refresh_token` when using the `AUTHORIZATION_CODE` grant flow. 2. The client application detects that the `access_token` is about to expire, based on the `expires_in` attribute contained within the JWT token. -3. The client submits an OAuth 2.0 token request to SHF in this form: +3. The client submits an OAuth 2.0 token request to SailPoint Identity Security in this form: ```text POST https://[tenant].api.identitynow.com/oauth/token?grant_type=refresh_token&client_id={client_id}&client_secret={client_secret}&refresh_token={refresh_token} ``` -4. SHF validates the token request and submits a response. If the request is successful, the response contains a new `access_token` and `refresh_token`. +4. SailPoint Identity Security validates the token request and submits a response. If the request is successful, the response contains a new `access_token` and `refresh_token`. These are the query parameters in the OAuth 2.0 token request for the refresh token grant flow: @@ -461,7 +461,7 @@ A successful request using any of the grant flows to `https://[tenant].api.ident } ``` -You can use the JWT `access_token` to authorize REST API calls through the SHF API gateway. To use the `access_token`, simply include it in the `Authorization` header as a `Bearer` token. This is an example API request that has the access token in the header: +You can use the JWT `access_token` to authorize REST API calls through the SailPoint Identity Security API gateway. To use the `access_token`, simply include it in the `Authorization` header as a `Bearer` token. This is an example API request that has the access token in the header: ```bash curl -X GET \ @@ -478,7 +478,7 @@ Some of the other values can also be useful to know: - The `user_id` and `identity_id` define the identity context of the person who authenticated. However, these values aren't set for the client credentials grant type because it doesn't have a user context. -With the JWT `access_token`, you can now successfully send authenticated SHF API requests. To learn more about authorization and the scopes you can apply to further control access to the APIs, refer to [Authorization](/docs/api/authorization). +With the JWT `access_token`, you can now successfully send authenticated SailPoint Identity Security API requests. To learn more about authorization and the scopes you can apply to further control access to the APIs, refer to [Authorization](/docs/api/authorization). ## More Information @@ -558,25 +558,25 @@ For daily work or short, quick administrative actions, you can just use a PAT. T Follow these steps to do so: -1. Log in to SHF. +1. Log in to SailPoint Identity Security. 2. Go to 'Preferences', then 'Personal Access Tokens', and [generate a PAT](#generate-a-personal-access-token). 3. The PAT's `client_id` and `client_secret` provide the necessary authentication to send API requests, without any grant flow. #### Postman -[Postman](https://www.postman.com/) is a popular HTTP client you can use to design, build, test, and iterate your APIs. Postman users and teams can create public workspaces they can use to make it easy to access their API collections and environments and get started. SailPoint maintains a [public workspace for the SailPoint Human Fabric API collections](https://www.postman.com/sailpoint/workspace/identitynow). You can use this workspace to access all the SHF API collections and stay up to date. +[Postman](https://www.postman.com/) is a popular HTTP client you can use to design, build, test, and iterate your APIs. Postman users and teams can create public workspaces they can use to make it easy to access their API collections and environments and get started. SailPoint maintains a [public workspace for the SailPoint Identity Security API collections](https://www.postman.com/sailpoint/workspace/identitynow). You can use this workspace to access all the SailPoint Identity Security API collections and stay up to date. If you're using Postman, you have some different ways to set up your authorization. You can just leverage the accessToken as mentioned above, or you can configure Postman to use OAuth 2.0 directly. For more information about how to do so, refer [here](https://learning.postman.com/docs/sending-requests/authorization/). #### Web applications -If you are making a web application, the best grant flow to use is the [Authorization Code grant flow](#request-access-token-with-authorization-code-grant-flow). This will allow users to be directed to SHF to login and then redirected back to the web application through a URL redirect. This also works well with Single Sign-on (SSO), strong authentication, and pass-through authentication mechanisms. +If you are making a web application, the best grant flow to use is the [Authorization Code grant flow](#request-access-token-with-authorization-code-grant-flow). This will allow users to be directed to SailPoint Identity Security to login and then redirected back to the web application through a URL redirect. This also works well with Single Sign-on (SSO), strong authentication, and pass-through authentication mechanisms. -SailPoint doesn't recommend using a password grant flow for web applications because doing so would involve entering SHF credentials in the web application. This flow also doesn't allow you to work with SSO, strong authentication, or pass-through authentication. +SailPoint doesn't recommend using a password grant flow for web applications because doing so would involve entering SailPoint Identity Security credentials in the web application. This flow also doesn't allow you to work with SSO, strong authentication, or pass-through authentication. #### Scripts, programs or system to system integration -If you are writing scripts, programs or system integrations that leverage the SHF APIs, the OAuth 2.0 grant you should use typically depends on what you're doing and the user context you need to operate under. +If you are writing scripts, programs or system integrations that leverage the SailPoint Identity Security APIs, the OAuth 2.0 grant you should use typically depends on what you're doing and the user context you need to operate under. Because scripts, code, and programs lack an interactive web-interface, it is difficult, but not impossible, to implement a working authorization code grant flow. System to system integrations may require an elevated level of access and utilize a service account to make API calls beyond the privileges of the authenticated user. diff --git a/docs/api/authorization.md b/docs/api/authorization.md index 92266c66a43ff..8c684bba3281d 100644 --- a/docs/api/authorization.md +++ b/docs/api/authorization.md @@ -6,7 +6,7 @@ sidebar_label: Authorization sidebar_position: 3 sidebar_class_name: authorization keywords: ['authorization', 'scope', 'permission'] -description: Authorize your SHF API requests. +description: Authorize your SailPoint Identity Security API requests. slug: /api/authorization tags: ['Authorization', 'Scopes', 'Permissions'] --- @@ -23,7 +23,7 @@ Authorization and authentication are two related concepts that help secure APIs. sequenceDiagram autonumber participant H as HTTP Client - participant I as SailPoint Human Fabric + participant I as SailPoint Identity Security H->>I: Request to delete a source I->>I: Authenticate access token @@ -76,7 +76,7 @@ Each endpoint document specifies how to authorize with the endpoint in the **Aut  -- **type**: The type of authorization method supported for this endpoint. SailPoint uses the [OAuth2 standard](./authentication.md#oauth-20) for all the SHF APIs. +- **type**: The type of authorization method supported for this endpoint. SailPoint uses the [OAuth2 standard](./authentication.md#oauth-20) for all the SailPoint Identity Security APIs. - **flow**: One or more OAuth flows supported by the endpoint. A token only needs to be generated by one flow to be valid. Refer to [Authentication Details](./authentication.md#choose-authorization-grant-flow) for more information about the available flows. - **scopes**: A list of scopes necessary to access the endpoint. A token only needs one of the scopes to authorize with the endpoint. When possible, choose the least privileged scope. Scopes ending in `read` can only retrieve data. Scopes ending in `manage` can retrieve, modify, and delete data. diff --git a/docs/api/getting-started.md b/docs/api/getting-started.md index dd667f752bf05..5323aac1e8b86 100644 --- a/docs/api/getting-started.md +++ b/docs/api/getting-started.md @@ -6,14 +6,14 @@ sidebar_label: Getting Started sidebar_position: 1 sidebar_class_name: gettingStarted keywords: ['getting started'] -description: Start using the SHF APIs. +description: Start using the SailPoint Identity Security APIs. slug: /api/getting-started tags: ['Getting Started'] --- ## Overview -This guide is intended to help you quickly Make your first API call to SailPoint Human Fabric and assumes an intermediate level of understanding of APIs. For beginners to APIs, we recommend you watch this presentation that covers the fundamentals of APIs with visual demonstrations of how to make an API call in SailPoint. +This guide is intended to help you quickly Make your first API call to SailPoint Identity Security and assumes an intermediate level of understanding of APIs. For beginners to APIs, we recommend you watch this presentation that covers the fundamentals of APIs with visual demonstrations of how to make an API call in SailPoint.
- );
- let linkText =
- {solved}
+
+ {liked}
+
+
+ - These are the legacy versioned API collections for SailPoint Human Fabric. + These are the legacy versioned API collections for SailPoint Identity Security. For the latest API documentation, visit the{' '} API Specifications page.
diff --git a/src/pages/blog.tsx b/src/pages/blog.tsx index ca150d8bfb368..0d7b512ef25a4 100644 --- a/src/pages/blog.tsx +++ b/src/pages/blog.tsx @@ -4,11 +4,11 @@ import BlogBanner from '../components/blog/BlogBanner'; import styles from './blog.module.css'; import BlogCards from '../components/blog/BlogCards'; import BlogSidebar from '../components/blog/BlogSidebar'; -import { SHF_PRODUCT_TAG } from '../util/util'; +import { PRODUCT_TAG } from '../util/util'; const Blog: React.FC = () => { const [filteredProduct, setFilteredProduct] = useState
- You have two ways to build on Identity Security Cloud today. A mini
+ You have two ways to build on SailPoint Identity Security today. A mini
hack is a small project with step-by-step instructions that you can
complete in about one hour. The main hack takes most of the
afternoon, and you design your own solution.
diff --git a/src/pages/hack-day/saas-connectivity.mdx b/src/pages/hack-day/saas-connectivity.mdx
index 3b9e67d1bc2f8..37a33d88cc6db 100644
--- a/src/pages/hack-day/saas-connectivity.mdx
+++ b/src/pages/hack-day/saas-connectivity.mdx
@@ -1,6 +1,6 @@
---
title: SaaS Connectivity
-description: Build and deploy a cloud-hosted SaaS connector for Identity Security Cloud.
+description: Build and deploy a cloud-hosted SaaS connector for SailPoint Identity Security.
wrapperClassName: hack-day-track
---
@@ -173,9 +173,9 @@ cd saas-connectivity-demo
npm install
```
-A SaaS connector is a small TypeScript app that ISC runs for you. ISC never calls the demo API
+A SaaS connector is a small TypeScript app that SailPoint Identity Security runs for you. SailPoint Identity Security never calls the demo API
itself — it sends your connector a command such as "list every account", and your connector turns
-that into HTTP calls and hands the results back in the shape ISC expects. What you just generated is
+that into HTTP calls and hands the results back in the shape the platform expects. What you just generated is
a complete but nearly empty version of that app: the build scripts, a local dev server, and one
placeholder command are wired up, and the translation between the two systems is left to you.
Everything from here is you filling in that translation, one command at a time.
@@ -184,7 +184,7 @@ Three files matter:
| File | What it does |
| --- | --- |
-| `connector-spec.json` | Tells ISC which commands you support, what config to prompt for, and your schemas |
+| `connector-spec.json` | Tells SailPoint Identity Security which commands you support, what config to prompt for, and your schemas |
| `src/my-client.ts` | Your HTTP calls to the demo API |
| `src/index.ts` | Maps the demo API's data onto the `std:*` commands |
@@ -192,8 +192,8 @@ Three files matter:
### 4. Define the connector spec
-The spec is your connector's contract with ISC, and ISC reads it before any of your code runs. It
-answers three questions: which commands ISC is allowed to send you, which configuration fields to
+The spec is your connector's contract with SailPoint Identity Security, and the platform reads it before any of your code runs. It
+answers three questions: which commands SailPoint Identity Security is allowed to send you, which configuration fields to
show an admin setting up a source, and what shape the data you return will be in. Code you write in
later steps has no effect until it is declared here.
@@ -328,7 +328,7 @@ with the following:
{
"name": "active",
"type": "boolean",
- "description": "Whether the account is active. Note this is the inverse of the ISC \"disabled\" flag."
+ "description": "Whether the account is active. Note this is the inverse of the SailPoint Identity Security \"disabled\" flag."
},
{
"name": "locked",
@@ -397,17 +397,17 @@ with the following:
Key things to note about what was changed from the scaffold:
-- **`commands`** — `std:entitlement:list` and `std:entitlement:read` are added. ISC will only invoke commands listed here.
-- **`sourceConfig`** — `baseUrl` (type `url`) and `apiKey` (type `secret`) are added so ISC renders the right form fields when an admin configures the source. Keys map directly to what `readConfig()` returns in your code.
-- **`accountSchema`** — `identityAttribute` points to `id` (the opaque `usr_...` key), `groupAttribute` points to `groups`, and the `groups` attribute is flagged `entitlement: true`, `multi: true`, and `managed: true` so ISC treats its values as entitlements it can add and remove.
-- **`entitlementSchemas`** — one entry of `type: "group"` with `includePermissions: true`, telling ISC to request and store permission detail from your connector.
+- **`commands`** — `std:entitlement:list` and `std:entitlement:read` are added. SailPoint Identity Security will only invoke commands listed here.
+- **`sourceConfig`** — `baseUrl` (type `url`) and `apiKey` (type `secret`) are added so SailPoint Identity Security renders the right form fields when an admin configures the source. Keys map directly to what `readConfig()` returns in your code.
+- **`accountSchema`** — `identityAttribute` points to `id` (the opaque `usr_...` key), `groupAttribute` points to `groups`, and the `groups` attribute is flagged `entitlement: true`, `multi: true`, and `managed: true` so SailPoint Identity Security treats its values as entitlements it can add and remove.
+- **`entitlementSchemas`** — one entry of `type: "group"` with `includePermissions: true`, telling SailPoint Identity Security to request and store permission detail from your connector.
- [Connector spec reference](/docs/connectivity/saas-connectivity/connector-spec)
### 5. Implement `std:test-connection`
This is the first of four commands you will implement, and the smallest — a good way to prove your
-credentials, your build, and your test loop all work before writing anything harder. ISC calls it
+credentials, your build, and your test loop all work before writing anything harder. SailPoint Identity Security calls it
when an admin clicks **Test Connection** while configuring a source, and it is the only signal they
get that the base URL and API key they typed are right. Return an empty object on success, or throw —
there is no "false" to return.
@@ -453,7 +453,7 @@ That is enough to pass the test. For a friendlier failure, wrap the call in a `t
`401`, throw a `ConnectorError` with a message an admin can act on — the **See details** section at
the end of this step shows that version.
-Now wire it up in `src/index.ts`. That file is your connector's entry point: ISC loads it, gives it
+Now wire it up in `src/index.ts`. That file is your connector's entry point: SailPoint Identity Security loads it, gives it
the source config, and dispatches every incoming command to a handler registered there. The
scaffolded version registers handlers for a fictional system, so replace its entire contents with
the shell below. It reads the config, builds one `MyClient` from it, and registers a single handler
@@ -492,11 +492,11 @@ Now test it without deploying anything. In your terminal, run:
npm run dev
```
-That starts a local server at `http://localhost:3000` which accepts the same command payloads ISC
+That starts a local server at `http://localhost:3000` which accepts the same command payloads SailPoint Identity Security
sends, and reloads every time you save a file — so leave it running for the rest of the walkthrough.
Open a **second terminal** window, or open Postman. Since the first is busy running the server, and send the server a
-`std:test-connection` command yourself. This is the same request ISC would make, so if it works here
+`std:test-connection` command yourself. This is the same request SailPoint Identity Security would make, so if it works here
it will work in your tenant — and you get an answer in a second instead of after a deploy:
See details: why not localhost, other ports, and how to unlink
-When your plugin starts, it performs a handshake with the ISC **App Shell**. The App Shell gives it
+When your plugin starts, it performs a handshake with the SailPoint Identity Security **App Shell**. The App Shell gives it
the tenant, the signed-in user, and the token for API calls. If you open `https://localhost:4200`
directly, there is no App Shell. The page renders, but every API call fails.
@@ -1472,7 +1472,7 @@ changes. When you upload again, the new bundle becomes the active one.
### 9. Add to the nav bar
A plugin URL works, but right now the only way to navigate to it is through the URL. A nav bar item gives your page a permanent home in
-ISC, next to the standard menus. This way it looks like it's really part of the product.
+SailPoint Identity Security, next to the standard menus. This way it looks like it's really part of the product.
:::tip Deploy first
@@ -1503,7 +1503,7 @@ menu item loads the deployed bundle, not your dev server.
:::tip Checkpoint
Refresh your tenant. The nav bar shows a **Manager Lookup** menu, and the menu contains
-**Manager Lookup Page**. Click it, and your page opens inside ISC.
+**Manager Lookup Page**. Click it, and your page opens inside SailPoint Identity Security.
:::
@@ -1547,7 +1547,7 @@ Pick whichever looks most interesting. Each one is something real plugins need t
## UI Plugins: an in-depth look
You do not need this section to finish the track. It explains the scaffold files you did not write,
-which is why your code is so short and why the page looks like ISC without extra styling.
+which is why your code is so short and why the page looks like SailPoint Identity Security without extra styling.
| File | What it does for you |
| --- | --- |
@@ -1640,14 +1640,14 @@ followed: PrimeNG components in the `imports` array, and a map from a state to a
## Take it to the main hack
-You now know what a UI plugin does! It runs inside ISC, it uses the signed-in user's session, and it
+You now know what a UI plugin does! It runs inside SailPoint Identity Security, it uses the signed-in user's session, and it
can call SailPoint APIs with no extra authentication. **Now, what do you want to build?**
You can submit a UI plugin as your main hack. The judges score it with the same
[judging criteria](/hack-day/judging-criteria) as the MCP Server hack, and it can win the same
prizes.
-Start with a real problem. Think of a task that takes too many clicks in ISC today, or a question
+Start with a real problem. Think of a task that takes too many clicks in SailPoint Identity Security today, or a question
that a manager, an auditor, or a help desk agent cannot answer easily. Then build the page that
solves it.
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index cef03fe5a56c3..2c5563f8ff3af 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -24,7 +24,7 @@ export default function Home(): ReactNode {
description={
"If you still aren't sure where to get started, try one of the Getting Started Guides below, or see what our platform has to offer."
}
- link={'https://www.sailpoint.com/products/human-fabric'}
+ link={'https://www.sailpoint.com/products/identity-security'}
title={'Start with the basics'}
image={'user'}
buttonText={'Explore our platform'}
diff --git a/src/theme/NavbarItem/MegaDropdownNavbarItem/styles.module.css b/src/theme/NavbarItem/MegaDropdownNavbarItem/styles.module.css
index d33d7f49d8698..cb34dc1c0fe89 100644
--- a/src/theme/NavbarItem/MegaDropdownNavbarItem/styles.module.css
+++ b/src/theme/NavbarItem/MegaDropdownNavbarItem/styles.module.css
@@ -63,6 +63,10 @@
color: var(--ifm-color-emphasis-600);
font-size: 0.78rem;
line-height: 1.45;
+ /* The navbar sets `white-space: nowrap`, which keeps long blurbs on one line
+ * and lets them spill into the next column. */
+ white-space: normal;
+ overflow-wrap: break-word;
}
.megaColumnList {
diff --git a/src/util/util.ts b/src/util/util.ts
index 5615e98197c4d..88f46cb9a873c 100644
--- a/src/util/util.ts
+++ b/src/util/util.ts
@@ -38,27 +38,32 @@ export function addDarkToFileName(filename: string): string {
export function CMSBaseURL(): string | undefined {
return process.env.CMS_APP_API_ENDPOINT;
}
- // The forum is gaining a new `sailpoint-human-fabric` tag rather than renaming
- // `identity-security-cloud`, so every topic tagged before the rebrand keeps the
- // old tag. Product-tag queries must therefore match EITHER tag, or all
+ // The forum adds a new tag at each rebrand rather than renaming the old one:
+ // `identity-security-cloud`, then `sailpoint-human-fabric`, now
+ // `sailpoint-identity-security`. Every topic tagged before a rebrand keeps
+ // its old tag, so product-tag queries must match ANY of the tags, or
// historical blog/CoLab/video content disappears from the site.
// Once the forum back-fills the new tag onto old topics, delete
- // SHF_LEGACY_PRODUCT_TAG and the expansion in discourseFilterQuery().
- export const SHF_PRODUCT_TAG = 'sailpoint-human-fabric';
- export const SHF_LEGACY_PRODUCT_TAG = 'identity-security-cloud';
+ // LEGACY_PRODUCT_TAGS and the expansion in discourseFilterQuery().
+ export const PRODUCT_TAG = 'sailpoint-identity-security';
+ export const LEGACY_PRODUCT_TAGS = [
+ 'sailpoint-human-fabric',
+ 'identity-security-cloud',
+ ];
+ const ALL_PRODUCT_TAGS = [PRODUCT_TAG, ...LEGACY_PRODUCT_TAGS];
export function isProductTag(tag: string): boolean {
- return tag === SHF_PRODUCT_TAG || tag === SHF_LEGACY_PRODUCT_TAG;
+ return ALL_PRODUCT_TAGS.includes(tag);
}
- // Expands the SHF product tag to both the new and legacy slug, leaving any
+ // Expands the product tag to the new and every legacy slug, leaving any
// other tag untouched.
export function expandProductTags(tags: string[]): string[] {
const out: string[] = [];
for (const tag of tags) {
if (isProductTag(tag)) {
- if (!out.includes(SHF_PRODUCT_TAG)) {
- out.push(SHF_PRODUCT_TAG, SHF_LEGACY_PRODUCT_TAG);
+ if (!out.includes(PRODUCT_TAG)) {
+ out.push(...ALL_PRODUCT_TAGS);
}
} else if (!out.includes(tag)) {
out.push(tag);
@@ -67,24 +72,24 @@ export function addDarkToFileName(filename: string): string {
return out;
}
- // Collapses either product slug to the new one, so UI state and checkbox
- // identity are single-valued even while both tags exist on the forum.
- // discourseFilterQuery() expands it back to both at query time.
+ // Collapses any product slug to the new one, so UI state and checkbox
+ // identity are single-valued even while several tags exist on the forum.
+ // discourseFilterQuery() expands it back to all of them at query time.
export function canonicalProductTag(tag: string): string {
- return isProductTag(tag) ? SHF_PRODUCT_TAG : tag;
+ return isProductTag(tag) ? PRODUCT_TAG : tag;
}
// Builds the `q` value for Discourse's /filter.json. Within one clause a comma
// means OR; separate clauses are ANDed. So the product tags collapse into a
// single OR clause while each other tag gets its own, giving
- // (new OR legacy) AND videoType — verified against the live forum.
+ // (new OR any legacy) AND videoType — verified against the live forum.
export function discourseFilterQuery(
categorySlug: string,
tags: string[],
): string {
const clauses = [`category:${categorySlug}`];
if (tags.some(isProductTag)) {
- clauses.push(`tag:${SHF_PRODUCT_TAG},${SHF_LEGACY_PRODUCT_TAG}`);
+ clauses.push(`tag:${ALL_PRODUCT_TAGS.join(',')}`);
}
for (const tag of tags.filter((t) => !isProductTag(t))) {
clauses.push(`tag:${tag}`);