SCIMDesktop Component
Properties Methods Events Config Settings Errors
The SCIMDesktop component provides an easy way to add automatic user and group provisioning to your desktop application.
Syntax
nsoftware.CloudSSO.SCIMDesktop
Remarks
The System for Cross-domain Identity Management (SCIM) protocol gives an Identity Provider (e.g., Okta or Microsoft Entra ID) a standardized way to automatically create, update, and deactivate accounts in your application. Instead of an administrator manually managing an account in every connected application, SCIM lets the Identity Provider push those changes out over a simple REST/JSON API whenever a user is hired, changes departments, or leaves the company.
The Identity Provider acts as the client, and your application is the SCIM service provider. This component implements the service provider role. It listens for incoming HTTP connections, parses each SCIM request, fires an event so your application can create, look up, update, or delete the corresponding record in its own data store, and then builds and sends the SCIM JSON response.
Unlike the SCIMWeb component, which is embedded within an existing web application or framework, this component hosts its own embedded HTTP server, so no external web server is required. This makes it well suited to a desktop application or background service that needs to expose a SCIM endpoint on its own.
Setup
The LocalHost and LocalPort properties are used to control the address and port the embedded server listens on. The StartListening method must be called to begin actively listening for incoming connections.
The MaxConnections and IdleTimeout properties may be used to control how many simultaneous connections are accepted and how long an idle connection is kept open, respectively. To expose the endpoint over HTTPS, the SSLEnabled property may be enabled alongside the specification of a certificate via the SSLCert property before calling StartListening.
scim.LocalHost = "127.0.0.1";
scim.LocalPort = 8443;
scim.SSLCert = new Certificate(CertStoreTypes.cstPFXFile, "cert.pfx", "password", "*");
scim.SSLEnabled = true;
scim.StartListening();
The component may also be configured with information about which SCIM operations to support and how requests should be routed. The BaseURL property is the path prefix used to recognize SCIM resource paths, and the SupportedOperations property is a bitmask that controls which combinations of HTTP method and resource type are accepted. The MaxResults property dictates how many resources can be returned from a single list request.
scim.BaseURL = "/scim/v2";
scim.SupportedOperations = SupportedOperations.sopAll;
scim.MaxResults = 200;
Authentication
Every incoming request fires the AuthRequest event before any resource-specific event is raised, giving the application the chance to accept or reject the request. The AuthMethod parameter identifies the scheme supplied by the client, detailed below.
| Bearer | The scheme used by most Identity Provider integrations. The Token parameter contains the raw bearer token. If the AuthToken property has been set, the component automatically compares it against the incoming token and pre-initializes the Accept parameter with the result, so a simple deployment does not need an AuthRequest handler at all. |
| Basic | The component decodes the credentials and provides the username and password through the User and Token parameters. No automatic comparison is performed. |
| Other/Unrecognized | The Accept parameter defaults to false and the application must explicitly accept the request from within an AuthRequest handler. |
| "" (empty string) | No Authorization header was present. User and Token are both empty and the Accept parameter defaults to false. |
The AllowedClients and BlockedClients configuration settings may be used if connections should be restricted at the network level as well.
A static bearer token may be supplied to the component as shown.
scim.AuthToken = "the-token-issued-to-your-identity-provider";
Alternatively, custom validation may be performed as shown.
scim.OnAuthRequest += (sender, e) => {
e.Accept = e.AuthMethod == "Bearer" && tokenStore.IsValid(e.Token);
};
User Management
The component fires an event for each standard SCIM user operation, giving the application full control over how users are stored.
Creating a User
A POST /Users request causes the CreateUser event to be fired with the submitted attributes, including any addresses and phone numbers through the UserEmails and UserPhones collections and enterprise attributes (department, employee number, manager, and so on) through the UserExtension property. The handler must assign and return a unique UserId and set the StatusCode parameter to 201.
Retrieving and Listing Users
A GET /Users/{id} request causes the GetUser event to be fired. The handler populates the user's current attributes and the AddUserEmail, AddUserPhone, and AddUserExtension methods may be called to include any related data.
A GET /Users request causes the ListUsers event to be fired instead, with pagination reflected in the StartIndex and Count parameters and, for simple single-term filters such as userName eq "jsmith", the parsed FilterAttribute, FilterOperator, and FilterValue parameters. The AddUser method should be called once per matching user, and the TotalResults parameter should be set to the total across all pages.
scim.OnListUsers += (sender, e) => {
var page = db.QueryUsers(e.FilterAttribute, e.FilterOperator, e.FilterValue, e.StartIndex - 1, e.Count);
foreach (var user in page.Results) {
scim.AddUser(user.Id, user.UserName, user.DisplayName, user.ExternalId, user.Active);
}
e.TotalResults = page.TotalCount;
e.StatusCode = 200;
};
Updating and Deleting Users
Both PUT /Users/{id} and PATCH /Users/{id} requests cause the UpdateUser event to be fired. For a PATCH request, the component first fires the GetUser event to load the current record, applies the patch operations from the request (including path-filtered operations such as emails[type eq "work"]) internally, and then fires the UpdateUser event with the fully merged result, so the handler always sees a complete, final representation of the user regardless of which method was used. The read-only RequestType property should be used if the handler needs to distinguish which method triggered the current event.
A DELETE /Users/{id} request causes the DeleteUser event to be fired. Deactivating a user without deleting their record is done the standard SCIM way, by setting the Active parameter to false through an update rather than issuing a delete.
Group Management
Groups follow the same pattern as users, and the CreateGroup, GetGroup, ListGroups, UpdateGroup, and DeleteGroup events all mirror their user counterparts. Group members are provided through the GroupMembers collection on create and update, and are added to an outgoing response with the AddGroupMember method. The AddGroup method is used to add each group to a ListGroups event response.
Discovery Endpoints
The component automatically answers the standard SCIM discovery endpoints so an Identity Provider can inspect your service provider's capabilities before provisioning begins.
A GET /ServiceProviderConfig request, which causes the GetServiceProviderConfig event to be fired, advertises the supported authentication scheme and which operations are enabled, based on the SupportedOperations property. GET /ResourceTypes requests, which cause the GetResourceTypes event to be fired, and GET /Schemas requests, which cause the GetSchemas event to be fired, describe the User and Group resource and schema definitions, including the enterprise user extension. All three events are informational, so the response body has already been generated by the time each one fires.
Property List
The following is the full list of the properties of the component with short descriptions. Click on the links for further details.
| AuthToken | The Bearer token used to authenticate incoming SCIM requests. |
| BaseURL | The base URL path for SCIM endpoints. |
| ConnectionBacklog | This property includes the maximum number of pending connections maintained by the Transmission Control Protocol (TCP)/IP subsystem. |
| GroupMembers | A collection of members for the current group. |
| IdleTimeout | The number of seconds before an idle connection is closed. |
| Listening | This property indicates whether the component is listening for incoming connections on LocalPort. |
| LocalHost | The address on which the embedded HTTP server listens. |
| LocalPort | The port on which the embedded HTTP server listens. |
| MaxConnections | The maximum number of simultaneous connections the server will accept. |
| MaxResults | The maximum number of resources requested from the application in a single list request. |
| RequestType | The HTTP method of the request currently being processed. |
| SSLAuthenticateClients | If set to True, the server asks the client(s) for a certificate. |
| SSLCert | The certificate to be used during Secure Sockets Layer (SSL) negotiation. |
| SSLEnabled | This property indicates whether Transport Layer Security/Secure Sockets Layer (TLS/SSL) is enabled. |
| SSLProvider | The Secure Sockets Layer/Transport Layer Security (SSL/TLS) implementation to use. |
| SupportedOperations | A bitmask that controls which SCIM operations the component accepts. |
| UserEmails | A collection of email addresses for the current inbound user. |
| UserExtension | The enterprise extension attributes for the current inbound user. |
| UserPhones | A collection of phone numbers for the current inbound user. |
Method List
The following is the full list of the methods of the component with short descriptions. Click on the links for further details.
| AddGroup | Adds a group entry to the outgoing list response. |
| AddGroupMember | Adds a member to the outgoing group response. |
| AddUser | Adds a user entry to the outgoing list response. |
| AddUserEmail | Adds an email address to the outgoing user response. |
| AddUserExtension | Adds enterprise extension attributes to the outgoing user response. |
| AddUserPhone | Adds a phone number to the outgoing user response. |
| Config | Sets or retrieves a configuration setting. |
| Disconnect | This method disconnects the specified client. |
| DoEvents | This method processes events from the internal message queue. |
| Reset | This method will reset the component. |
| Shutdown | This method shuts down the server. |
| StartListening | This method starts listening for incoming connections. |
| StopListening | This method stops listening for new connections. |
Event List
The following is the full list of the events fired by the component with short descriptions. Click on the links for further details.
| AuthRequest | Fired for every incoming request to control access to specific endpoints. |
| Connected | This event is fired immediately after a connection completes (or fails). |
| ConnectionRequest | This event is fired when a request for connection comes from a remote host. |
| CreateGroup | Fired when a request to create a new group is received. |
| CreateUser | Fired when a request to create a new user is received. |
| DeleteGroup | Fired when a request to delete a group is received. |
| DeleteUser | Fired when a request to delete a user is received. |
| Disconnected | This event is fired when a connection is closed. |
| Error | This event fires information about errors during data delivery. |
| GetGroup | Fired when a request to retrieve a group is received, before a PATCH group update, or when ETags are enabled and a PUT or DELETE request includes an If-Match header. |
| GetResourceTypes | Fired when a request for the resource type definitions is received. |
| GetSchemas | Fired when a request for the schema definitions is received. |
| GetServiceProviderConfig | Fired when a request for the service provider configuration is received. |
| GetUser | Fired when a request to retrieve a user is received, before a PATCH user update, or when ETags are enabled and a PUT or DELETE request includes an If-Match header. |
| ListGroups | Fired when a request to list groups is received. |
| ListUsers | Fired when a request to list users is received. |
| Log | Fired once for each log message. |
| SSLClientAuthentication | This event is fired when the client presents its credentials to the server. |
| SSLConnectionRequest | This event fires when a Secure Sockets Layer (SSL) connection is requested. |
| SSLStatus | This event is fired to show the progress of the secure connection. |
| UpdateGroup | Fired after the current group has been loaded and a replace or update request has been applied. |
| UpdateUser | Fired after the current user has been loaded and a replace or update request has been applied. |
Config Settings
The following is a list of config settings for the component with short descriptions. Click on the links for further details.
| AllowedClients | A comma-separated list of IP addresses or hostnames allowed to connect. |
| BlockedClients | A comma-separated list of IP addresses or hostnames that are denied connections. |
| ETagEnabled | Whether to include ETag headers in user and group responses. |
| IgnoreUnknownPatchAttributes | Whether to ignore PATCH operations that target unsupported attributes. |
| LogLevel | Controls the level of detail that is logged through the Log event. |
| RequestBody | The body of the most recently received SCIM request. |
| UseIPv6 | Controls IPv4/IPv6 listening behavior. |
| XChildCount | The number of child elements of the current JSON element. |
| XChildName[i] | The name of a child JSON element. |
| XChildXText[i] | The text of a child JSON element. |
| XElement | The name of the current JSON element. |
| XParent | The parent of the current JSON element. |
| XPath | Selects an element in the most recently received SCIM JSON request. |
| XSubTree | A snapshot of the current JSON element. |
| XText | The text of the current JSON element. |
| BuildInfo | Information about the product's build. |
| GUIAvailable | Whether or not a message loop is available for processing events. |
| LicenseInfo | Information about the current license. |
| MaskSensitiveData | Whether sensitive data is masked in log messages. |
| UseInternalSecurityAPI | Whether or not to use the system security libraries or an internal implementation. |
AuthToken Property (SCIMDesktop Component)
The Bearer token used to authenticate incoming SCIM requests.
Syntax
Default Value
""
Remarks
When this property is set, the component compares the incoming authorization bearer token against its value and initializes the Accept parameter of the AuthRequest event accordingly before the event fires. If the token is missing or does not match, the Accept parameter will be set to false. Likewise, if a match is found, the Accept parameter will be set to true. This value may be overridden in the handler when the AuthRequest event fires (e.g., the handler can reject a matching token to enforce expiry or check a revocation list).
This property only takes effect for Bearer authentication and has no influence on other authentication schemes.
When this property is empty, no automatic comparison is performed and Accept defaults to false. Without an AuthRequest handler that explicitly accepts the request, all incoming requests receive a 401 Unauthorized response.
BaseURL Property (SCIMDesktop Component)
The base URL path for SCIM endpoints.
Syntax
Default Value
"/scim/v2"
Remarks
This property defines the base path prefix the component uses when routing incoming requests to SCIM endpoints. All SCIM resource paths are resolved relative to this value (e.g., with the default value of /scim/v2, a request for /scim/v2/Users is recognized as a User list request).
This value must begin with a forward slash. Trailing slashes are removed automatically, so /scim/v2/ and /scim/v2 are equivalent.
ConnectionBacklog Property (SCIMDesktop Component)
This property includes the maximum number of pending connections maintained by the Transmission Control Protocol (TCP)/IP subsystem.
Syntax
Default Value
5
Remarks
This property contains the maximum number of pending connections maintained by the TCP/IP subsystem. This value reflects the SOMAXCONN option for the main listening socket. The default value for most systems is 5. You may set this property to a larger value if the server is expected to receive a large number of connections, and queuing them is desirable.
This property is not available at design time.
GroupMembers Property (SCIMDesktop Component)
A collection of members for the current group.
Syntax
public SCIMMemberList GroupMembers { get; }
Public ReadOnly Property GroupMembers As SCIMMemberList
Remarks
This collection holds a list of SCIMMember items.
When the CreateGroup event is fired, this collection is populated with the members provided in the request. When the UpdateGroup event is fired, it is populated with the complete final member list. For a PATCH request, this reflects the group loaded via the GetGroup event with the patch operations applied. For a PUT request, it reflects the member list from the request body directly.
This property is read-only and not available at design time.
Please refer to the SCIMMember type for a complete list of fields.IdleTimeout Property (SCIMDesktop Component)
The number of seconds before an idle connection is closed.
Syntax
Default Value
10
Remarks
This property is used to specify how long, in seconds, the embedded server allows a connection to remain idle (i.e., no data sent or received) before closing it.
The default timeout is 10 seconds, and a value of 0 may be provided to disable the timeout.
Listening Property (SCIMDesktop Component)
This property indicates whether the component is listening for incoming connections on LocalPort.
Syntax
Default Value
False
Remarks
This property indicates whether the component is listening for connections on the port specified by the LocalPort property. Use the StartListening and StopListening methods to control whether the component is listening.
This property is read-only and not available at design time.
LocalHost Property (SCIMDesktop Component)
The address on which the embedded HTTP server listens.
Syntax
Default Value
""
Remarks
This property is used to specify the local interface address on which the embedded HTTP server binds. The default is "" (empty string), which causes the server to listen on all available interfaces.
This property should be set to a specific IP address to restrict the server to a single network interface (e.g., 127.0.0.1 to accept only local connections).
LocalPort Property (SCIMDesktop Component)
The port on which the embedded HTTP server listens.
Syntax
Default Value
80
Remarks
This property is used to specify the TCP port on which the server accepts SCIM requests. The default is 80, and it must be set before calling the StartListening method.
This property should be set to 0 to cause the system to choose a random available port. After StartListening is called, this property may be queried to read the actual port assigned.
When the SSLEnabled property is enabled, the server automatically listens for TLS connections. If this property is still at its default of 80 when SSLEnabled is toggled, the port switches to 443 automatically. If a non-default port has already been set, it is not changed.
This property is not available at design time.
MaxConnections Property (SCIMDesktop Component)
The maximum number of simultaneous connections the server will accept.
Syntax
Default Value
100000
Remarks
This property controls how many concurrent connections the embedded server will maintain. An incoming connection attempt beyond this limit is accepted and immediately closed.
The default, and maximum supported, value is 100,000. Unlike LocalHost and LocalPort, this property may be changed at any time, even while the server is listening. The new limit applies to subsequent connection attempts.
MaxResults Property (SCIMDesktop Component)
The maximum number of resources requested from the application in a single list request.
Syntax
Default Value
200
Remarks
This property limits the Count parameter of the ListUsers and ListGroups events. When the Identity Provider omits the count query parameter or requests more results than this value, Count is set to this value. The component does not remove resources from the response, so the event handler should add no more than Count resources.
This value is also reported in the ServiceProviderConfig discovery endpoint as the maximum allowed value for pagination.
RequestType Property (SCIMDesktop Component)
The HTTP method of the request currently being processed.
Syntax
Default Value
""
Remarks
This read-only property is used to determine the HTTP method (GET, POST, PUT, PATCH, or DELETE) of the request being processed. It is eligible to be queried during any event fired by the component.
When the component processes a PATCH request, it fires the GetUser or GetGroup event to retrieve the current resource first. When the ETagEnabled configuration setting is true and the client includes an If-Match header on a PUT or DELETE request, the GetUser or GetGroup event also fires to validate the ETag before the update or delete event.
This property is read-only.
SSLAuthenticateClients Property (SCIMDesktop Component)
If set to True, the server asks the client(s) for a certificate.
Syntax
Default Value
False
Remarks
This property is used in conjunction with the SSLClientAuthentication event. Please refer to the documentation of the SSLClientAuthentication event for details.
SSLCert Property (SCIMDesktop Component)
The certificate to be used during Secure Sockets Layer (SSL) negotiation.
Syntax
public Certificate SSLCert { get; set; }
Public Property SSLCert As Certificate
Remarks
This property includes the digital certificate that the component will use during SSL negotiation. Set this property to a valid certificate before starting SSL negotiation. To set a certificate, you may set the Encoded field to the encoded certificate. To select a certificate, use the store and subject fields.
Please refer to the Certificate type for a complete list of fields.SSLEnabled Property (SCIMDesktop Component)
This property indicates whether Transport Layer Security/Secure Sockets Layer (TLS/SSL) is enabled.
Syntax
Default Value
False
Remarks
This property specifies whether TLS/SSL is enabled in the component. When False (default), the component operates in plaintext mode. When True, TLS/SSL is enabled.
TLS/SSL may also be enabled by setting SSLStartMode. Setting SSLStartMode will automatically update this property value.
This property is not available at design time.
SSLProvider Property (SCIMDesktop Component)
The Secure Sockets Layer/Transport Layer Security (SSL/TLS) implementation to use.
Syntax
public SCIMDesktopSSLProviders SSLProvider { get; set; }
enum SCIMDesktopSSLProviders { sslpAutomatic, sslpPlatform, sslpInternal }
Public Property SSLProvider As ScimdesktopSSLProviders
Enum SCIMDesktopSSLProviders sslpAutomatic sslpPlatform sslpInternal End Enum
Default Value
0
Remarks
This property specifies the SSL/TLS implementation to use. In most cases the default value of 0 (Automatic) is recommended and should not be changed. When set to 0 (Automatic), the component will select whether to use the platform implementation or the internal implementation depending on the operating system as well as the TLS version being used.
Possible values are as follows:
| 0 (sslpAutomatic - default) | Automatically selects the appropriate implementation. |
| 1 (sslpPlatform) | Uses the platform/system implementation. |
| 2 (sslpInternal) | Uses the internal implementation. |
In most cases using the default value (Automatic) is recommended. The component will select a provider depending on the current platform.
When Automatic is selected, on Windows, the component will use the platform implementation. On Linux/macOS, the component will use the internal implementation. When TLS 1.3 is enabled via SSLEnabledProtocols, the component will always try and use the platform implementation. If the platform TLS 1.3 implementation is not available, the internal implementation will be used.
The .NET Standard library will always use the internal implementation on all platforms.
SupportedOperations Property (SCIMDesktop Component)
A bitmask that controls which SCIM operations the component accepts.
Syntax
Default Value
65535
Remarks
This property determines which SCIM operations are enabled. Requests for disabled operations receive a 501 Not Implemented response. The following flags are defined (specified in hexadecimal notation) and may be combined:
| 0x0001 (sopUserCreate) | Accept POST /Users requests. Fires the CreateUser event. |
| 0x0002 (sopUserRead) | Accept GET /Users/{id} requests. Fires the GetUser event. |
| 0x0004 (sopUserUpdate) | Accept PUT /Users/{id} and PATCH /Users/{id} requests. Fires the GetUser and UpdateUser events. |
| 0x0008 (sopUserDelete) | Accept DELETE /Users/{id} requests. Fires the DeleteUser event. |
| 0x0010 (sopUserList) | Accept GET /Users requests. Fires the ListUsers event. |
| 0x0100 (sopGroupCreate) | Accept POST /Groups requests. Fires the CreateGroup event. |
| 0x0200 (sopGroupRead) | Accept GET /Groups/{id} requests. Fires the GetGroup event. |
| 0x0400 (sopGroupUpdate) | Accept PUT /Groups/{id} and PATCH /Groups/{id} requests. Fires the GetGroup and UpdateGroup events. |
| 0x0800 (sopGroupDelete) | Accept DELETE /Groups/{id} requests. Fires the DeleteGroup event. |
| 0x1000 (sopGroupList) | Accept GET /Groups requests. Fires the ListGroups event. |
| 0xFFFF (sopAll) | Enable all operations, which is the default. |
Bits not listed above are reserved for future use and are currently ignored. sopAll is defined as 0xFFFF to include any operations added in future versions.
Note that PUT and PATCH requests share the same flag (sopUserUpdate / sopGroupUpdate). Enabling the flag accepts both methods, and disabling it rejects both. For PATCH requests, the component retrieves the current resource via GetUser or GetGroup, applies the patch operations, then fires UpdateUser or UpdateGroup with the merged result.
When the ETagEnabled configuration setting is enabled and a PUT or DELETE request includes an If-Match header, the component also fires GetUser or GetGroup to validate the ETag before the update or delete event fires.
The discovery endpoints (/ServiceProviderConfig, /ResourceTypes, /Schemas) are always available regardless of this property's value.
The capabilities advertised in the ServiceProviderConfig discovery endpoint are derived from this property automatically.
UserEmails Property (SCIMDesktop Component)
A collection of email addresses for the current inbound user.
Syntax
public SCIMEmailList UserEmails { get; }
Public ReadOnly Property UserEmails As SCIMEmailList
Remarks
This collection holds a list of SCIMEmail items.
When the CreateUser event is fired, this collection is populated with the email addresses provided in the request. When the UpdateUser event is fired, it is populated with the complete final email address list. For a PATCH request, this reflects the user loaded via the GetUser event with the patch operations applied. For a PUT request, it reflects the email address list from the request body directly. Each entry exposes an Address, EmailType, and Primary field.
To include email addresses in an outgoing response, the Address value should be passed to the Address parameter when calling the AddUserEmail method.
This property is read-only and not available at design time.
Please refer to the SCIMEmail type for a complete list of fields.UserExtension Property (SCIMDesktop Component)
The enterprise extension attributes for the current inbound user.
Syntax
public SCIMExtension UserExtension { get; }
Public ReadOnly Property UserExtension As SCIMExtension
Remarks
When the CreateUser event is fired, this property contains the enterprise extension attributes provided in the request. When the UpdateUser event is fired, it contains the final values. For a PATCH request, this reflects the user loaded via the GetUser event with the patch operations applied. For a PUT request, it reflects the enterprise extension attributes from the request body directly.
This property exposes the following fields: Department, EmployeeNumber, CostCenter, Organization, Division, ManagerId, ManagerRef, and ManagerDisplayName. The component will set any fields not included in the request to "" (empty string).
To include enterprise extension data in an outgoing response, the AddUserExtension method should be called.
The component natively supports the SCIM enterprise user extension schema (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User). The extension schema namespace is handled internally. The API exposes extension attributes directly without requiring the URN to be specified. Additional extension schemas may be supported in future releases.
This property is read-only and not available at design time.
Please refer to the SCIMExtension type for a complete list of fields.UserPhones Property (SCIMDesktop Component)
A collection of phone numbers for the current inbound user.
Syntax
public SCIMPhoneList UserPhones { get; }
Public ReadOnly Property UserPhones As SCIMPhoneList
Remarks
This collection holds a list of SCIMPhone items.
When the CreateUser event is fired, this collection is populated with the phone numbers provided in the request. When the UpdateUser event is fired, it is populated with the complete final phone number list. For a PATCH request, this reflects the user loaded via the GetUser event with the patch operations applied. For a PUT request, it reflects the phone number list from the request body directly. Each entry exposes a Number, PhoneType, and Primary field.
To include phone numbers in an outgoing response, the Number value should be passed to the Number parameter when calling the AddUserPhone method.
This property is read-only and not available at design time.
Please refer to the SCIMPhone type for a complete list of fields.AddGroup Method (SCIMDesktop Component)
Adds a group entry to the outgoing list response.
Syntax
public void AddGroup(string groupId, string displayName, string externalId); Async Version public async Task AddGroup(string groupId, string displayName, string externalId); public async Task AddGroup(string groupId, string displayName, string externalId, CancellationToken cancellationToken);
Public Sub AddGroup(ByVal GroupId As String, ByVal DisplayName As String, ByVal ExternalId As String) Async Version Public Sub AddGroup(ByVal GroupId As String, ByVal DisplayName As String, ByVal ExternalId As String) As Task Public Sub AddGroup(ByVal GroupId As String, ByVal DisplayName As String, ByVal ExternalId As String, cancellationToken As CancellationToken) As Task
Remarks
This method should be called within a ListGroups event handler once for each group in the current page of results. The component then assembles all added entries into the SCIM ListResponse envelope.
GroupId is the unique identifier for the group, and DisplayName may be empty if not available.
The stored ExternalId should be passed for the group (or "" (empty string) if not recorded).
After all entries have been added, the TotalResults event parameter should be set to the total number of matching groups across all pages, which may be greater than the number of entries added in the current method call.
scim.OnListGroups += (sender, e) => {
var page = db.QueryGroups(e.FilterAttribute, e.FilterOperator, e.FilterValue, e.StartIndex - 1, e.Count);
foreach (var group in page.Results) {
scim.AddGroup(group.Id, group.DisplayName, group.ExternalId);
}
e.TotalResults = page.TotalCount;
e.StatusCode = 200;
};
AddGroupMember Method (SCIMDesktop Component)
Adds a member to the outgoing group response.
Syntax
public void AddGroupMember(string groupId, string memberId, string memberDisplay); Async Version public async Task AddGroupMember(string groupId, string memberId, string memberDisplay); public async Task AddGroupMember(string groupId, string memberId, string memberDisplay, CancellationToken cancellationToken);
Public Sub AddGroupMember(ByVal GroupId As String, ByVal MemberId As String, ByVal MemberDisplay As String) Async Version Public Sub AddGroupMember(ByVal GroupId As String, ByVal MemberId As String, ByVal MemberDisplay As String) As Task Public Sub AddGroupMember(ByVal GroupId As String, ByVal MemberId As String, ByVal MemberDisplay As String, cancellationToken As CancellationToken) As Task
Remarks
This method should be called within a GetGroup or ListGroups event handler once for each group member to be included in the SCIM response.
GroupId identifies the group to which the member belongs, and MemberId and MemberDisplay represent the SCIM resource ID and display name of the member user, respectively.
scim.OnGetGroup += (sender, e) => {
var group = db.FindGroup(e.GroupId);
e.DisplayName = group.DisplayName;
e.ExternalId = group.ExternalId;
foreach (var member in group.Members) {
scim.AddGroupMember(e.GroupId, member.UserId, member.DisplayName);
}
e.StatusCode = 200;
};
AddUser Method (SCIMDesktop Component)
Adds a user entry to the outgoing list response.
Syntax
public void AddUser(string userId, string userName, string displayName, string externalId, bool active); Async Version public async Task AddUser(string userId, string userName, string displayName, string externalId, bool active); public async Task AddUser(string userId, string userName, string displayName, string externalId, bool active, CancellationToken cancellationToken);
Public Sub AddUser(ByVal UserId As String, ByVal UserName As String, ByVal DisplayName As String, ByVal ExternalId As String, ByVal Active As Boolean) Async Version Public Sub AddUser(ByVal UserId As String, ByVal UserName As String, ByVal DisplayName As String, ByVal ExternalId As String, ByVal Active As Boolean) As Task Public Sub AddUser(ByVal UserId As String, ByVal UserName As String, ByVal DisplayName As String, ByVal ExternalId As String, ByVal Active As Boolean, cancellationToken As CancellationToken) As Task
Remarks
This method should be called within a ListUsers event handler once for each user in the current page of results. The component then assembles all added entries into the SCIM ListResponse envelope.
UserId is the unique identifier for the user, UserName is the user's SCIM username, and DisplayName may be empty if not available.
The stored ExternalId should be passed for the user (or "" (empty string) if not recorded). Active indicates whether the user account is enabled.
After all entries have been added, the TotalResults event parameter should be set to the total number of matching users across all pages, which may be greater than the number of entries added in the current method call.
void scim_ListUsers(object sender, SCIMDesktopListUsersEventArgs e)
{
var results = db.QueryUsers(e.FilterAttribute, e.FilterOperator, e.FilterValue,
e.StartIndex - 1, e.Count);
foreach (var user in results.Page)
scim.AddUser(user.Id, user.UserName, user.DisplayName, user.ExternalId, user.Active);
e.TotalResults = results.TotalCount;
e.StatusCode = 0;
}
AddUserEmail Method (SCIMDesktop Component)
Adds an email address to the outgoing user response.
Syntax
public void AddUserEmail(string userId, string address, string emailType, bool primary); Async Version public async Task AddUserEmail(string userId, string address, string emailType, bool primary); public async Task AddUserEmail(string userId, string address, string emailType, bool primary, CancellationToken cancellationToken);
Public Sub AddUserEmail(ByVal UserId As String, ByVal Address As String, ByVal EmailType As String, ByVal Primary As Boolean) Async Version Public Sub AddUserEmail(ByVal UserId As String, ByVal Address As String, ByVal EmailType As String, ByVal Primary As Boolean) As Task Public Sub AddUserEmail(ByVal UserId As String, ByVal Address As String, ByVal EmailType As String, ByVal Primary As Boolean, cancellationToken As CancellationToken) As Task
Remarks
This method should be called within a GetUser or ListUsers event handler once for each user's email address to be included in the response.
UserId identifies which user the address belongs to. Address is the email address string, and EmailType classifies the address (common values include work, home, and other). Primary should be set to true only for the user's primary address.
scim.OnGetUser += (sender, e) => {
var user = db.FindUser(e.UserId);
e.UserName = user.UserName;
e.DisplayName = user.DisplayName;
e.Active = user.Active;
foreach (var email in user.Emails) {
scim.AddUserEmail(e.UserId, email.Address, email.EmailType, email.Primary);
}
e.StatusCode = 200;
};
AddUserExtension Method (SCIMDesktop Component)
Adds enterprise extension attributes to the outgoing user response.
Syntax
public void AddUserExtension(string userId, string department, string employeeNumber, string costCenter, string organization, string division, string managerId, string managerRef, string managerDisplayName); Async Version public async Task AddUserExtension(string userId, string department, string employeeNumber, string costCenter, string organization, string division, string managerId, string managerRef, string managerDisplayName); public async Task AddUserExtension(string userId, string department, string employeeNumber, string costCenter, string organization, string division, string managerId, string managerRef, string managerDisplayName, CancellationToken cancellationToken);
Public Sub AddUserExtension(ByVal UserId As String, ByVal Department As String, ByVal EmployeeNumber As String, ByVal CostCenter As String, ByVal Organization As String, ByVal Division As String, ByVal ManagerId As String, ByVal ManagerRef As String, ByVal ManagerDisplayName As String) Async Version Public Sub AddUserExtension(ByVal UserId As String, ByVal Department As String, ByVal EmployeeNumber As String, ByVal CostCenter As String, ByVal Organization As String, ByVal Division As String, ByVal ManagerId As String, ByVal ManagerRef As String, ByVal ManagerDisplayName As String) As Task Public Sub AddUserExtension(ByVal UserId As String, ByVal Department As String, ByVal EmployeeNumber As String, ByVal CostCenter As String, ByVal Organization As String, ByVal Division As String, ByVal ManagerId As String, ByVal ManagerRef As String, ByVal ManagerDisplayName As String, cancellationToken As CancellationToken) As Task
Remarks
This method should be called within a GetUser or ListUsers event handler once for each user's enterprise extension data to be included in the response.
UserId identifies which user the data belongs to. Department, EmployeeNumber, CostCenter, Organization, and Division are the enterprise user attributes.
ManagerId is the user identifier of the user's manager, ManagerRef is the full URI of the manager's user resource, and ManagerDisplayName is the manager's display name.
"" (empty string) should be passed for any attribute that is not applicable or not stored.
scim.OnGetUser += (sender, e) => {
var user = db.FindUser(e.UserId);
e.UserName = user.UserName;
e.DisplayName = user.DisplayName;
e.Active = user.Active;
if (user.HasManager) {
scim.AddUserExtension(e.UserId, user.Department, user.EmployeeNumber, user.CostCenter, user.Organization,
user.Division, user.ManagerId, "", user.ManagerDisplayName);
}
e.StatusCode = 200;
};
The component natively supports the SCIM enterprise user extension schema (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User). The extension schema namespace is handled internally. The API exposes extension attributes directly without requiring the URN to be specified. Additional extension schemas may be supported in future releases.
AddUserPhone Method (SCIMDesktop Component)
Adds a phone number to the outgoing user response.
Syntax
public void AddUserPhone(string userId, string number, string phoneType, bool primary); Async Version public async Task AddUserPhone(string userId, string number, string phoneType, bool primary); public async Task AddUserPhone(string userId, string number, string phoneType, bool primary, CancellationToken cancellationToken);
Public Sub AddUserPhone(ByVal UserId As String, ByVal Number As String, ByVal PhoneType As String, ByVal Primary As Boolean) Async Version Public Sub AddUserPhone(ByVal UserId As String, ByVal Number As String, ByVal PhoneType As String, ByVal Primary As Boolean) As Task Public Sub AddUserPhone(ByVal UserId As String, ByVal Number As String, ByVal PhoneType As String, ByVal Primary As Boolean, cancellationToken As CancellationToken) As Task
Remarks
This method should be called within a GetUser or ListUsers event handler once for each user's phone number to be included in the response.
UserId identifies which user the number belongs to. Number is the phone number string, and PhoneType classifies the number (common values include work, mobile, home, and other). Primary should be set to true only for the user's primary number.
scim.OnGetUser += (sender, e) => {
var user = db.FindUser(e.UserId);
e.UserName = user.UserName;
e.DisplayName = user.DisplayName;
e.Active = user.Active;
foreach (var phone in user.Phones) {
scim.AddUserPhone(e.UserId, phone.Number, phone.PhoneType, phone.Primary);
}
e.StatusCode = 200;
};
Config Method (SCIMDesktop Component)
Sets or retrieves a configuration setting.
Syntax
Remarks
Config is a generic method available in every component. It is used to set and retrieve configuration settings for the component.
These settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the component, access to these internal properties is provided through the Config method.
To set a configuration setting named PROPERTY, you must call Config("PROPERTY=VALUE"), where VALUE is the value of the setting expressed as a string. For boolean values, use the strings "True", "False", "0", "1", "Yes", or "No" (case does not matter).
To read (query) the value of a configuration setting, you must call Config("PROPERTY"). The value will be returned as a string.
Disconnect Method (SCIMDesktop Component)
This method disconnects the specified client.
Syntax
public void Disconnect(string connectionId); Async Version public async Task Disconnect(string connectionId); public async Task Disconnect(string connectionId, CancellationToken cancellationToken);
Public Sub Disconnect(ByVal ConnectionId As String) Async Version Public Sub Disconnect(ByVal ConnectionId As String) As Task Public Sub Disconnect(ByVal ConnectionId As String, cancellationToken As CancellationToken) As Task
Remarks
Calling this method will disconnect the client specified by the ConnectionId parameter.
DoEvents Method (SCIMDesktop Component)
This method processes events from the internal message queue.
Syntax
public void DoEvents(); Async Version public async Task DoEvents(); public async Task DoEvents(CancellationToken cancellationToken);
Public Sub DoEvents() Async Version Public Sub DoEvents() As Task Public Sub DoEvents(cancellationToken As CancellationToken) As Task
Remarks
When DoEvents is called, the component processes any available events. If no events are available, it waits for a preset period of time, and then returns.
Reset Method (SCIMDesktop Component)
This method will reset the component.
Syntax
public void Reset(); Async Version public async Task Reset(); public async Task Reset(CancellationToken cancellationToken);
Public Sub Reset() Async Version Public Sub Reset() As Task Public Sub Reset(cancellationToken As CancellationToken) As Task
Remarks
This method will reset the component's properties to their default values.
Shutdown Method (SCIMDesktop Component)
This method shuts down the server.
Syntax
public void Shutdown(); Async Version public async Task Shutdown(); public async Task Shutdown(CancellationToken cancellationToken);
Public Sub Shutdown() Async Version Public Sub Shutdown() As Task Public Sub Shutdown(cancellationToken As CancellationToken) As Task
Remarks
This method shuts down the server. Calling this method is equivalent to calling StopListening and then breaking every client connection by calling Disconnect.
StartListening Method (SCIMDesktop Component)
This method starts listening for incoming connections.
Syntax
public void StartListening(); Async Version public async Task StartListening(); public async Task StartListening(CancellationToken cancellationToken);
Public Sub StartListening() Async Version Public Sub StartListening() As Task Public Sub StartListening(cancellationToken As CancellationToken) As Task
Remarks
This method begins listening for incoming connections on the port specified by LocalPort. Once listening, events will fire as new clients connect and data are transferred.
To stop listening for new connections, call StopListening. To stop listening for new connections and to disconnect all existing clients, call Shutdown.
StopListening Method (SCIMDesktop Component)
This method stops listening for new connections.
Syntax
public void StopListening(); Async Version public async Task StopListening(); public async Task StopListening(CancellationToken cancellationToken);
Public Sub StopListening() Async Version Public Sub StopListening() As Task Public Sub StopListening(cancellationToken As CancellationToken) As Task
Remarks
This method stops listening for new connections. After being called, any new connection attempts will be rejected. Calling this method does not disconnect existing connections.
To stop listening and to disconnect all existing clients, call Shutdown instead.
AuthRequest Event (SCIMDesktop Component)
Fired for every incoming request to control access to specific endpoints.
Syntax
public event OnAuthRequestHandler OnAuthRequest; public delegate void OnAuthRequestHandler(object sender, SCIMDesktopAuthRequestEventArgs e); public class SCIMDesktopAuthRequestEventArgs : EventArgs { public string ConnectionId { get; } public string AuthMethod { get; } public string User { get; } public string Token { get; } public bool Accept { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopAuthRequestEventArgs> OnAuthRequest; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopAuthRequestEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string AuthMethod { get; } public string User { get; } public string Token { get; } public bool Accept { get; set; } }
Public Event OnAuthRequest As OnAuthRequestHandler Public Delegate Sub OnAuthRequestHandler(sender As Object, e As SCIMDesktopAuthRequestEventArgs) Public Class SCIMDesktopAuthRequestEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property AuthMethod As String Public ReadOnly Property User As String Public ReadOnly Property Token As String Public Property Accept As Boolean End Class Async Version Public Event OnAuthRequest As AsyncEventHandler(Of SCIMDesktopAuthRequestEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopAuthRequestEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property AuthMethod As String Public ReadOnly Property User As String Public ReadOnly Property Token As String Public Property Accept As Boolean End Class
Remarks
This event fires for every incoming request before any resource event is raised, allowing the application to implement custom authentication logic.
The AuthMethod parameter identifies the authentication scheme supplied by the client.
| Bearer | The Token parameter contains the raw bearer token, and the User parameter remains empty. If the AuthToken property has been set, the component automatically compares it against the incoming token and pre-initializes the Accept parameter with the result. When AuthToken is not set, Accept defaults to false. |
| Basic | The component decodes the base64 credentials and splits them on the colon separator. User contains the username and Token contains the password. Accept defaults to false. No automatic credential check is performed. |
| Other/Unrecognized | The AuthMethod parameter contains the scheme name as supplied by the client. Token contains everything following it and User is empty. Accept defaults to false. |
| "" (empty string) | No Authorization header was present. User and Token are both set to "" (empty string). Accept defaults to false. |
The Accept value may be changed when additional logic outside of the component is required (e.g., to enforce token expiry, check a revocation list, or accept an alternative authentication scheme).
Requests rejected by this event receive a 401 Unauthorized response.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
Note that this event fires for every incoming request.
Custom validation covering multiple authentication schemes may be performed as shown.
scim.OnAuthRequest += (sender, e) => {
if (e.AuthMethod == "Bearer") {
e.Accept = tokenStore.IsValid(e.Token);
} else if (e.AuthMethod == "Basic") {
e.Accept = userStore.CheckPassword(e.User, e.Token);
} else {
e.Accept = false;
}
};
Connected Event (SCIMDesktop Component)
This event is fired immediately after a connection completes (or fails).
Syntax
public event OnConnectedHandler OnConnected; public delegate void OnConnectedHandler(object sender, SCIMDesktopConnectedEventArgs e); public class SCIMDesktopConnectedEventArgs : EventArgs { public string ConnectionId { get; } public int StatusCode { get; } public string Description { get; } } Async Version public event AsyncEventHandler<SCIMDesktopConnectedEventArgs> OnConnected; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopConnectedEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public int StatusCode { get; } public string Description { get; } }
Public Event OnConnected As OnConnectedHandler Public Delegate Sub OnConnectedHandler(sender As Object, e As SCIMDesktopConnectedEventArgs) Public Class SCIMDesktopConnectedEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property StatusCode As Integer Public ReadOnly Property Description As String End Class Async Version Public Event OnConnected As AsyncEventHandler(Of SCIMDesktopConnectedEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopConnectedEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property StatusCode As Integer Public ReadOnly Property Description As String End Class
Remarks
If the connection is made normally, StatusCode is 0, and Description is "OK".
If the connection fails, StatusCode has the error code returned by the system. Description contains a description of this code. The value of StatusCode is equal to the value of the system error.
Please refer to the Error Codes section for more information.
ConnectionRequest Event (SCIMDesktop Component)
This event is fired when a request for connection comes from a remote host.
Syntax
public event OnConnectionRequestHandler OnConnectionRequest; public delegate void OnConnectionRequestHandler(object sender, SCIMDesktopConnectionRequestEventArgs e); public class SCIMDesktopConnectionRequestEventArgs : EventArgs { public string Address { get; } public int Port { get; } public bool Accept { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopConnectionRequestEventArgs> OnConnectionRequest; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopConnectionRequestEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string Address { get; } public int Port { get; } public bool Accept { get; set; } }
Public Event OnConnectionRequest As OnConnectionRequestHandler Public Delegate Sub OnConnectionRequestHandler(sender As Object, e As SCIMDesktopConnectionRequestEventArgs) Public Class SCIMDesktopConnectionRequestEventArgs Inherits EventArgs Public ReadOnly Property Address As String Public ReadOnly Property Port As Integer Public Property Accept As Boolean End Class Async Version Public Event OnConnectionRequest As AsyncEventHandler(Of SCIMDesktopConnectionRequestEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopConnectionRequestEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property Address As String Public ReadOnly Property Port As Integer Public Property Accept As Boolean End Class
Remarks
This event indicates an incoming connection. The connection is accepted by default. Address and Port will contain information about the remote host requesting the inbound connection. If you want to refuse it, you can set the Accept parameter to False.
CreateGroup Event (SCIMDesktop Component)
Fired when a request to create a new group is received.
Syntax
public event OnCreateGroupHandler OnCreateGroup; public delegate void OnCreateGroupHandler(object sender, SCIMDesktopCreateGroupEventArgs e); public class SCIMDesktopCreateGroupEventArgs : EventArgs { public string ConnectionId { get; } public string ExternalId { get; } public string DisplayName { get; } public string GroupId { get; set; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopCreateGroupEventArgs> OnCreateGroup; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopCreateGroupEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string ExternalId { get; } public string DisplayName { get; } public string GroupId { get; set; } public int StatusCode { get; set; } }
Public Event OnCreateGroup As OnCreateGroupHandler Public Delegate Sub OnCreateGroupHandler(sender As Object, e As SCIMDesktopCreateGroupEventArgs) Public Class SCIMDesktopCreateGroupEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property ExternalId As String Public ReadOnly Property DisplayName As String Public Property GroupId As String Public Property StatusCode As Integer End Class Async Version Public Event OnCreateGroup As AsyncEventHandler(Of SCIMDesktopCreateGroupEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopCreateGroupEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property ExternalId As String Public ReadOnly Property DisplayName As String Public Property GroupId As String Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a POST /Groups request from the Identity Provider. The inbound group attributes are provided as event parameters.
If the Identity Provider included an externalId in the request, it is made available in the ExternalId parameter. This value should be stored alongside the group record so it can be returned in future GetGroup event responses.
If the request includes group members, they are made available via the GroupMembers collection, where each entry exposes a MemberId and MemberDisplay field.
If the group is created successfully, the GroupId parameter must be set to the newly assigned identifier, and the StatusCode parameter must be set to 201. The full created resource is returned to the Identity Provider in the 201 Created response body. To signal an error, StatusCode must be set to the appropriate HTTP status code (e.g., 409 for a duplicate group). The StatusCode parameter defaults to 500, and a value of 0 is treated as 201.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
CreateUser Event (SCIMDesktop Component)
Fired when a request to create a new user is received.
Syntax
public event OnCreateUserHandler OnCreateUser; public delegate void OnCreateUserHandler(object sender, SCIMDesktopCreateUserEventArgs e); public class SCIMDesktopCreateUserEventArgs : EventArgs { public string ConnectionId { get; } public string ExternalId { get; } public string UserName { get; } public string GivenName { get; } public string FamilyName { get; } public string DisplayName { get; } public bool Active { get; } public string UserId { get; set; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopCreateUserEventArgs> OnCreateUser; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopCreateUserEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string ExternalId { get; } public string UserName { get; } public string GivenName { get; } public string FamilyName { get; } public string DisplayName { get; } public bool Active { get; } public string UserId { get; set; } public int StatusCode { get; set; } }
Public Event OnCreateUser As OnCreateUserHandler Public Delegate Sub OnCreateUserHandler(sender As Object, e As SCIMDesktopCreateUserEventArgs) Public Class SCIMDesktopCreateUserEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property ExternalId As String Public ReadOnly Property UserName As String Public ReadOnly Property GivenName As String Public ReadOnly Property FamilyName As String Public ReadOnly Property DisplayName As String Public ReadOnly Property Active As Boolean Public Property UserId As String Public Property StatusCode As Integer End Class Async Version Public Event OnCreateUser As AsyncEventHandler(Of SCIMDesktopCreateUserEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopCreateUserEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property ExternalId As String Public ReadOnly Property UserName As String Public ReadOnly Property GivenName As String Public ReadOnly Property FamilyName As String Public ReadOnly Property DisplayName As String Public ReadOnly Property Active As Boolean Public Property UserId As String Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a POST /Users request from the Identity Provider. The inbound user attributes are provided as event parameters.
If the Identity Provider included an externalId in the request, it is made available in the ExternalId parameter. This value should be stored alongside the user record so it can be returned in future GetUser event responses.
The Active parameter indicates whether the new user account should be enabled. If the Identity Provider does not include an active attribute in the request, Active defaults to true.
Email addresses and phone numbers supplied in the request are made available via the UserEmails and UserPhones collections, where each entry exposes an Address, EmailType, and Primary field (for emails) or a Number, PhoneType, and Primary field (for phones). If the Identity Provider included enterprise extension attributes in the request, they are also made available via the UserExtension property.
If the user is created successfully, the UserId parameter must be set to the newly assigned identifier, and the StatusCode parameter must be set to 201. The full created resource is returned to the Identity Provider in the 201 Created response body. To signal an error, StatusCode must be set to the appropriate HTTP status code (e.g., 409 for a duplicate user). The StatusCode parameter defaults to 500, and a value of 0 is treated as 201.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
DeleteGroup Event (SCIMDesktop Component)
Fired when a request to delete a group is received.
Syntax
public event OnDeleteGroupHandler OnDeleteGroup; public delegate void OnDeleteGroupHandler(object sender, SCIMDesktopDeleteGroupEventArgs e); public class SCIMDesktopDeleteGroupEventArgs : EventArgs { public string ConnectionId { get; } public string GroupId { get; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopDeleteGroupEventArgs> OnDeleteGroup; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopDeleteGroupEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string GroupId { get; } public int StatusCode { get; set; } }
Public Event OnDeleteGroup As OnDeleteGroupHandler Public Delegate Sub OnDeleteGroupHandler(sender As Object, e As SCIMDesktopDeleteGroupEventArgs) Public Class SCIMDesktopDeleteGroupEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property GroupId As String Public Property StatusCode As Integer End Class Async Version Public Event OnDeleteGroup As AsyncEventHandler(Of SCIMDesktopDeleteGroupEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopDeleteGroupEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property GroupId As String Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a DELETE /Groups/{id} request from the Identity Provider. The GroupId parameter identifies the group to delete.
If the deletion is successful, the StatusCode parameter must be set to 204. The component then returns a 204 No Content response. If the group is not found, StatusCode must be set to 404. The StatusCode parameter defaults to 500, and a value of 0 is treated as 204.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
DeleteUser Event (SCIMDesktop Component)
Fired when a request to delete a user is received.
Syntax
public event OnDeleteUserHandler OnDeleteUser; public delegate void OnDeleteUserHandler(object sender, SCIMDesktopDeleteUserEventArgs e); public class SCIMDesktopDeleteUserEventArgs : EventArgs { public string ConnectionId { get; } public string UserId { get; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopDeleteUserEventArgs> OnDeleteUser; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopDeleteUserEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string UserId { get; } public int StatusCode { get; set; } }
Public Event OnDeleteUser As OnDeleteUserHandler Public Delegate Sub OnDeleteUserHandler(sender As Object, e As SCIMDesktopDeleteUserEventArgs) Public Class SCIMDesktopDeleteUserEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property UserId As String Public Property StatusCode As Integer End Class Async Version Public Event OnDeleteUser As AsyncEventHandler(Of SCIMDesktopDeleteUserEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopDeleteUserEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property UserId As String Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a DELETE /Users/{id} request from the Identity Provider. The UserId parameter identifies the user to delete.
If the deletion is successful, the StatusCode parameter must be set to 204. The component then returns a 204 No Content response. If the user is not found, StatusCode must be set to 404. The StatusCode parameter defaults to 500, and a value of 0 is treated as 204.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
Disconnected Event (SCIMDesktop Component)
This event is fired when a connection is closed.
Syntax
public event OnDisconnectedHandler OnDisconnected; public delegate void OnDisconnectedHandler(object sender, SCIMDesktopDisconnectedEventArgs e); public class SCIMDesktopDisconnectedEventArgs : EventArgs { public string ConnectionId { get; } public int StatusCode { get; } public string Description { get; } } Async Version public event AsyncEventHandler<SCIMDesktopDisconnectedEventArgs> OnDisconnected; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopDisconnectedEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public int StatusCode { get; } public string Description { get; } }
Public Event OnDisconnected As OnDisconnectedHandler Public Delegate Sub OnDisconnectedHandler(sender As Object, e As SCIMDesktopDisconnectedEventArgs) Public Class SCIMDesktopDisconnectedEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property StatusCode As Integer Public ReadOnly Property Description As String End Class Async Version Public Event OnDisconnected As AsyncEventHandler(Of SCIMDesktopDisconnectedEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopDisconnectedEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property StatusCode As Integer Public ReadOnly Property Description As String End Class
Remarks
If the connection is broken normally, StatusCode is 0, and Description is "OK".
If the connection is broken for any other reason, StatusCode has the error code returned by the system. Description contains a description of this code. The value of StatusCode is equal to the value of the system error.
Please refer to the Error Codes section for more information.
Error Event (SCIMDesktop Component)
This event fires information about errors during data delivery.
Syntax
public event OnErrorHandler OnError; public delegate void OnErrorHandler(object sender, SCIMDesktopErrorEventArgs e); public class SCIMDesktopErrorEventArgs : EventArgs { public string ConnectionId { get; } public int ErrorCode { get; } public string Description { get; } } Async Version public event AsyncEventHandler<SCIMDesktopErrorEventArgs> OnError; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopErrorEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public int ErrorCode { get; } public string Description { get; } }
Public Event OnError As OnErrorHandler Public Delegate Sub OnErrorHandler(sender As Object, e As SCIMDesktopErrorEventArgs) Public Class SCIMDesktopErrorEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property ErrorCode As Integer Public ReadOnly Property Description As String End Class Async Version Public Event OnError As AsyncEventHandler(Of SCIMDesktopErrorEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopErrorEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property ErrorCode As Integer Public ReadOnly Property Description As String End Class
Remarks
The Error event is fired in case of exceptional conditions during message processing. Normally, the component throws an exception.
ErrorCode contains an error code and Description contains a textual description of the error. For a list of valid error codes and their descriptions, please refer to the Error Codes section.
ConnectionId indicates the connection for which the error is applicable.
This event also fires when the component rejects a SCIM request, immediately before the error response is returned to the Identity Provider. This includes requests the component itself rejects, such as a malformed request body or a failed authentication. It also includes requests an application event handler rejects by setting its StatusCode parameter to 400 or higher. Those requests report the generic error code 1.
For a rejected SCIM request, Description is the message carried in the detail field of the SCIM error response body. The HTTP status and the response body have already been determined by the time the event fires, so a handler cannot change what is returned to the Identity Provider.
GetGroup Event (SCIMDesktop Component)
Fired when a request to retrieve a group is received, before a PATCH group update, or when ETags are enabled and a PUT or DELETE request includes an If-Match header.
Syntax
public event OnGetGroupHandler OnGetGroup; public delegate void OnGetGroupHandler(object sender, SCIMDesktopGetGroupEventArgs e); public class SCIMDesktopGetGroupEventArgs : EventArgs { public string ConnectionId { get; } public string GroupId { get; } public string ExternalId { get; set; } public string DisplayName { get; set; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopGetGroupEventArgs> OnGetGroup; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopGetGroupEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string GroupId { get; } public string ExternalId { get; set; } public string DisplayName { get; set; } public int StatusCode { get; set; } }
Public Event OnGetGroup As OnGetGroupHandler Public Delegate Sub OnGetGroupHandler(sender As Object, e As SCIMDesktopGetGroupEventArgs) Public Class SCIMDesktopGetGroupEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property GroupId As String Public Property ExternalId As String Public Property DisplayName As String Public Property StatusCode As Integer End Class Async Version Public Event OnGetGroup As AsyncEventHandler(Of SCIMDesktopGetGroupEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopGetGroupEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property GroupId As String Public Property ExternalId As String Public Property DisplayName As String Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a GET /Groups/{id} request from the Identity Provider. It also fires before processing a PATCH /Groups/{id} request, or when the ETagEnabled configuration setting is true and a PUT /Groups/{id} or DELETE /Groups/{id} request includes an If-Match header. The GroupId parameter identifies the group to retrieve.
The DisplayName must be set to the group's display name. If an ExternalId was stored for this group, it must be set as well. To include group members in the response, the AddGroupMember method should be called once for each member. This event must supply the full group for a PATCH request to work correctly.
When the group is found, the StatusCode parameter must be set to 200. If the group is not found, StatusCode must be set to 404.
The RequestType property may be used to determine whether this event was fired by a direct GET request or internally before a PATCH or a conditional PUT/DELETE.
The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
GetResourceTypes Event (SCIMDesktop Component)
Fired when a request for the resource type definitions is received.
Syntax
public event OnGetResourceTypesHandler OnGetResourceTypes; public delegate void OnGetResourceTypesHandler(object sender, SCIMDesktopGetResourceTypesEventArgs e); public class SCIMDesktopGetResourceTypesEventArgs : EventArgs { public string ConnectionId { get; } public string ResponseBody { get; }
public byte[] ResponseBodyB { get; } } Async Version public event AsyncEventHandler<SCIMDesktopGetResourceTypesEventArgs> OnGetResourceTypes; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopGetResourceTypesEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string ResponseBody { get; }
public byte[] ResponseBodyB { get; } }
Public Event OnGetResourceTypes As OnGetResourceTypesHandler Public Delegate Sub OnGetResourceTypesHandler(sender As Object, e As SCIMDesktopGetResourceTypesEventArgs) Public Class SCIMDesktopGetResourceTypesEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property ResponseBody As String
Public ReadOnly Property ResponseBodyB As Byte() End Class Async Version Public Event OnGetResourceTypes As AsyncEventHandler(Of SCIMDesktopGetResourceTypesEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopGetResourceTypesEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property ResponseBody As String
Public ReadOnly Property ResponseBodyB As Byte() End Class
Remarks
This event fires when the component receives a GET /ResourceTypes request from the Identity Provider. The component returns the standard SCIM User and Group resource type definitions automatically and populates the ResponseBody parameter with the serialized JSON before firing this event.
This event is informational and may be used to log or audit discovery requests and inspect the generated response.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
GetSchemas Event (SCIMDesktop Component)
Fired when a request for the schema definitions is received.
Syntax
public event OnGetSchemasHandler OnGetSchemas; public delegate void OnGetSchemasHandler(object sender, SCIMDesktopGetSchemasEventArgs e); public class SCIMDesktopGetSchemasEventArgs : EventArgs { public string ConnectionId { get; } public string ResponseBody { get; }
public byte[] ResponseBodyB { get; } } Async Version public event AsyncEventHandler<SCIMDesktopGetSchemasEventArgs> OnGetSchemas; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopGetSchemasEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string ResponseBody { get; }
public byte[] ResponseBodyB { get; } }
Public Event OnGetSchemas As OnGetSchemasHandler Public Delegate Sub OnGetSchemasHandler(sender As Object, e As SCIMDesktopGetSchemasEventArgs) Public Class SCIMDesktopGetSchemasEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property ResponseBody As String
Public ReadOnly Property ResponseBodyB As Byte() End Class Async Version Public Event OnGetSchemas As AsyncEventHandler(Of SCIMDesktopGetSchemasEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopGetSchemasEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property ResponseBody As String
Public ReadOnly Property ResponseBodyB As Byte() End Class
Remarks
This event fires when the component receives a GET /Schemas request from the Identity Provider. The component returns the standard SCIM User and Group schema definitions, including the enterprise user extension, automatically and populates the ResponseBody parameter with the serialized JSON before firing this event.
This event is informational and may be used to log or audit discovery requests and inspect the generated response.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
GetServiceProviderConfig Event (SCIMDesktop Component)
Fired when a request for the service provider configuration is received.
Syntax
public event OnGetServiceProviderConfigHandler OnGetServiceProviderConfig; public delegate void OnGetServiceProviderConfigHandler(object sender, SCIMDesktopGetServiceProviderConfigEventArgs e); public class SCIMDesktopGetServiceProviderConfigEventArgs : EventArgs { public string ConnectionId { get; } public string ResponseBody { get; }
public byte[] ResponseBodyB { get; } } Async Version public event AsyncEventHandler<SCIMDesktopGetServiceProviderConfigEventArgs> OnGetServiceProviderConfig; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopGetServiceProviderConfigEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string ResponseBody { get; }
public byte[] ResponseBodyB { get; } }
Public Event OnGetServiceProviderConfig As OnGetServiceProviderConfigHandler Public Delegate Sub OnGetServiceProviderConfigHandler(sender As Object, e As SCIMDesktopGetServiceProviderConfigEventArgs) Public Class SCIMDesktopGetServiceProviderConfigEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property ResponseBody As String
Public ReadOnly Property ResponseBodyB As Byte() End Class Async Version Public Event OnGetServiceProviderConfig As AsyncEventHandler(Of SCIMDesktopGetServiceProviderConfigEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopGetServiceProviderConfigEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property ResponseBody As String
Public ReadOnly Property ResponseBodyB As Byte() End Class
Remarks
This event fires when the component receives a GET /ServiceProviderConfig request from the Identity Provider. The component generates the configuration document automatically based on the SupportedOperations and MaxResults properties and populates the ResponseBody parameter with the serialized JSON before firing this event.
This event is informational and may be used to log or audit discovery requests and inspect the generated response.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
GetUser Event (SCIMDesktop Component)
Fired when a request to retrieve a user is received, before a PATCH user update, or when ETags are enabled and a PUT or DELETE request includes an If-Match header.
Syntax
public event OnGetUserHandler OnGetUser; public delegate void OnGetUserHandler(object sender, SCIMDesktopGetUserEventArgs e); public class SCIMDesktopGetUserEventArgs : EventArgs { public string ConnectionId { get; } public string UserId { get; } public string ExternalId { get; set; } public string UserName { get; set; } public string GivenName { get; set; } public string FamilyName { get; set; } public string DisplayName { get; set; } public bool Active { get; set; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopGetUserEventArgs> OnGetUser; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopGetUserEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string UserId { get; } public string ExternalId { get; set; } public string UserName { get; set; } public string GivenName { get; set; } public string FamilyName { get; set; } public string DisplayName { get; set; } public bool Active { get; set; } public int StatusCode { get; set; } }
Public Event OnGetUser As OnGetUserHandler Public Delegate Sub OnGetUserHandler(sender As Object, e As SCIMDesktopGetUserEventArgs) Public Class SCIMDesktopGetUserEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property UserId As String Public Property ExternalId As String Public Property UserName As String Public Property GivenName As String Public Property FamilyName As String Public Property DisplayName As String Public Property Active As Boolean Public Property StatusCode As Integer End Class Async Version Public Event OnGetUser As AsyncEventHandler(Of SCIMDesktopGetUserEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopGetUserEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property UserId As String Public Property ExternalId As String Public Property UserName As String Public Property GivenName As String Public Property FamilyName As String Public Property DisplayName As String Public Property Active As Boolean Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a GET /Users/{id} request from the Identity Provider. It also fires before processing a PATCH /Users/{id} request, or when the ETagEnabled configuration setting is true and a PUT /Users/{id} or DELETE /Users/{id} request includes an If-Match header. The UserId parameter identifies the user to retrieve.
The output parameters (i.e., UserName, GivenName, FamilyName, DisplayName, Active) must be set to the current user data. If an ExternalId was stored for this user, it must be set as well. To include email addresses, phone numbers, and enterprise extension data in the response, the AddUserEmail, AddUserPhone, and AddUserExtension methods should be called once for each address, number, and user with extension data on record. This event must supply the full user for a PATCH request to work correctly.
When the user is found, the StatusCode parameter must be set to 200. If the user is not found, StatusCode must be set to 404.
The RequestType property may be used to determine whether this event was fired by a direct GET request or internally before a PATCH or a conditional PUT/DELETE.
The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
ListGroups Event (SCIMDesktop Component)
Fired when a request to list groups is received.
Syntax
public event OnListGroupsHandler OnListGroups; public delegate void OnListGroupsHandler(object sender, SCIMDesktopListGroupsEventArgs e); public class SCIMDesktopListGroupsEventArgs : EventArgs { public string ConnectionId { get; } public string Filter { get; } public string FilterAttribute { get; } public string FilterOperator { get; } public string FilterValue { get; } public int StartIndex { get; } public int Count { get; } public int TotalResults { get; set; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopListGroupsEventArgs> OnListGroups; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopListGroupsEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string Filter { get; } public string FilterAttribute { get; } public string FilterOperator { get; } public string FilterValue { get; } public int StartIndex { get; } public int Count { get; } public int TotalResults { get; set; } public int StatusCode { get; set; } }
Public Event OnListGroups As OnListGroupsHandler Public Delegate Sub OnListGroupsHandler(sender As Object, e As SCIMDesktopListGroupsEventArgs) Public Class SCIMDesktopListGroupsEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property Filter As String Public ReadOnly Property FilterAttribute As String Public ReadOnly Property FilterOperator As String Public ReadOnly Property FilterValue As String Public ReadOnly Property StartIndex As Integer Public ReadOnly Property Count As Integer Public Property TotalResults As Integer Public Property StatusCode As Integer End Class Async Version Public Event OnListGroups As AsyncEventHandler(Of SCIMDesktopListGroupsEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopListGroupsEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property Filter As String Public ReadOnly Property FilterAttribute As String Public ReadOnly Property FilterOperator As String Public ReadOnly Property FilterValue As String Public ReadOnly Property StartIndex As Integer Public ReadOnly Property Count As Integer Public Property TotalResults As Integer Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a GET /Groups request from the Identity Provider. The Filter parameter contains the raw SCIM filter expression from the request, or "" (empty string) if no filter was specified. For simple single-term filters (e.g., displayName eq "Admins"), the FilterAttribute, FilterOperator, and FilterValue parameters are also populated with the parsed components for convenience. For compound or nested filter expressions, only Filter is populated. The application must parse it directly.
The StartIndex and Count parameters reflect the pagination values from the request. StartIndex is 1-based, and Count is capped by the value of the MaxResults property. When the Identity Provider does not include a count parameter, Count defaults to MaxResults. The application should use these values to query its data source and return only the matching page of results. The sortBy and sortOrder query parameters are not currently supported and are ignored when received.
The AddGroup method must be called once for each group in the current page of results, after which the TotalResults parameter must be set to the total number of matching groups across all pages. To include members for each group, the AddGroupMember method may be called as needed. The StatusCode must be set to 200 when the operation succeeds.
To signal an error, StatusCode must be set to the appropriate HTTP status code. The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
ListUsers Event (SCIMDesktop Component)
Fired when a request to list users is received.
Syntax
public event OnListUsersHandler OnListUsers; public delegate void OnListUsersHandler(object sender, SCIMDesktopListUsersEventArgs e); public class SCIMDesktopListUsersEventArgs : EventArgs { public string ConnectionId { get; } public string Filter { get; } public string FilterAttribute { get; } public string FilterOperator { get; } public string FilterValue { get; } public int StartIndex { get; } public int Count { get; } public int TotalResults { get; set; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopListUsersEventArgs> OnListUsers; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopListUsersEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string Filter { get; } public string FilterAttribute { get; } public string FilterOperator { get; } public string FilterValue { get; } public int StartIndex { get; } public int Count { get; } public int TotalResults { get; set; } public int StatusCode { get; set; } }
Public Event OnListUsers As OnListUsersHandler Public Delegate Sub OnListUsersHandler(sender As Object, e As SCIMDesktopListUsersEventArgs) Public Class SCIMDesktopListUsersEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property Filter As String Public ReadOnly Property FilterAttribute As String Public ReadOnly Property FilterOperator As String Public ReadOnly Property FilterValue As String Public ReadOnly Property StartIndex As Integer Public ReadOnly Property Count As Integer Public Property TotalResults As Integer Public Property StatusCode As Integer End Class Async Version Public Event OnListUsers As AsyncEventHandler(Of SCIMDesktopListUsersEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopListUsersEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property Filter As String Public ReadOnly Property FilterAttribute As String Public ReadOnly Property FilterOperator As String Public ReadOnly Property FilterValue As String Public ReadOnly Property StartIndex As Integer Public ReadOnly Property Count As Integer Public Property TotalResults As Integer Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a GET /Users request from the Identity Provider. The Filter parameter contains the raw SCIM filter expression from the request, or "" (empty string) if no filter was specified. For simple single-term filters (e.g., userName eq "jsmith"), the FilterAttribute, FilterOperator, and FilterValue parameters are also populated with the parsed components for convenience. For compound or nested filter expressions, only Filter is populated. The application must parse it directly.
The StartIndex and Count parameters reflect the pagination values from the request. StartIndex is 1-based, and Count is capped by the value of the MaxResults property. When the Identity Provider does not include a count parameter, Count defaults to MaxResults. The application should use these values to query its data source and return only the matching page of results. The sortBy and sortOrder query parameters are not currently supported and are ignored when received.
The AddUser method must be called once for each user in the current page of results. To include email addresses, phone numbers, or enterprise extension data for each user, the AddUserEmail, AddUserPhone, and AddUserExtension methods may be called as needed. After all users have been added, the TotalResults parameter must be set to the total number of matching users across all pages. This value may be greater than Count if the result set is paginated. The StatusCode must be set to 200 when the operation succeeds.
To signal an error, StatusCode must be set to the appropriate HTTP status code. The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
Log Event (SCIMDesktop Component)
Fired once for each log message.
Syntax
public event OnLogHandler OnLog; public delegate void OnLogHandler(object sender, SCIMDesktopLogEventArgs e); public class SCIMDesktopLogEventArgs : EventArgs { public string ConnectionId { get; } public int LogLevel { get; } public string Message { get; } public string LogType { get; } } Async Version public event AsyncEventHandler<SCIMDesktopLogEventArgs> OnLog; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopLogEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public int LogLevel { get; } public string Message { get; } public string LogType { get; } }
Public Event OnLog As OnLogHandler Public Delegate Sub OnLogHandler(sender As Object, e As SCIMDesktopLogEventArgs) Public Class SCIMDesktopLogEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property LogLevel As Integer Public ReadOnly Property Message As String Public ReadOnly Property LogType As String End Class Async Version Public Event OnLog As AsyncEventHandler(Of SCIMDesktopLogEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopLogEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property LogLevel As Integer Public ReadOnly Property Message As String Public ReadOnly Property LogType As String End Class
Remarks
This event fires once for each log message generated by the component while it processes a SCIM request. This includes messages from the built-in HTTP server about the HTTP messages exchanged with the Identity Provider. The verbosity is controlled by the LogLevel configuration setting.
LogLevel indicates the level of the message. Possible values are as follows:
| 0 (None) | No messages are logged. |
| 1 (Info - default) | Each request received, its completion status, and the result of authenticating the request are logged. The HTTP request line and headers, and the HTTP status line and response headers, are also logged. |
| 2 (Verbose) | Equivalent to 1 (Info) for this component. No additional detail is logged at this level. |
| 3 (Debug) | Additionally logs which event (e.g., CreateUser or ListGroups) is about to be invoked to handle the current request, and the HTTP request and response bodies. |
Message is the log entry.
LogType identifies the type of log entry. Possible values are as follows:
- "SCIM": Messages about processing the SCIM request, such as the authentication result and the event being invoked.
- "HTTPConnection": The HTTP messages exchanged with the Identity Provider.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
SSLClientAuthentication Event (SCIMDesktop Component)
This event is fired when the client presents its credentials to the server.
Syntax
public event OnSSLClientAuthenticationHandler OnSSLClientAuthentication; public delegate void OnSSLClientAuthenticationHandler(object sender, SCIMDesktopSSLClientAuthenticationEventArgs e); public class SCIMDesktopSSLClientAuthenticationEventArgs : EventArgs { public string ConnectionId { get; } public string CertEncoded { get; }
public byte[] CertEncodedB { get; } public string CertSubject { get; } public string CertIssuer { get; } public string Status { get; } public bool Accept { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopSSLClientAuthenticationEventArgs> OnSSLClientAuthentication; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopSSLClientAuthenticationEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string CertEncoded { get; }
public byte[] CertEncodedB { get; } public string CertSubject { get; } public string CertIssuer { get; } public string Status { get; } public bool Accept { get; set; } }
Public Event OnSSLClientAuthentication As OnSSLClientAuthenticationHandler Public Delegate Sub OnSSLClientAuthenticationHandler(sender As Object, e As SCIMDesktopSSLClientAuthenticationEventArgs) Public Class SCIMDesktopSSLClientAuthenticationEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property CertEncoded As String
Public ReadOnly Property CertEncodedB As Byte() Public ReadOnly Property CertSubject As String Public ReadOnly Property CertIssuer As String Public ReadOnly Property Status As String Public Property Accept As Boolean End Class Async Version Public Event OnSSLClientAuthentication As AsyncEventHandler(Of SCIMDesktopSSLClientAuthenticationEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopSSLClientAuthenticationEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property CertEncoded As String
Public ReadOnly Property CertEncodedB As Byte() Public ReadOnly Property CertSubject As String Public ReadOnly Property CertIssuer As String Public ReadOnly Property Status As String Public Property Accept As Boolean End Class
Remarks
This event enables the server to decide whether or not to continue. The Accept parameter is a recommendation on whether to continue or to close the connection. This is just a suggestion: application software must use its own logic to determine whether or not to continue.
When Accept is False, Status shows why the verification failed (otherwise, Status contains the string "OK").
SSLConnectionRequest Event (SCIMDesktop Component)
This event fires when a Secure Sockets Layer (SSL) connection is requested.
Syntax
public event OnSSLConnectionRequestHandler OnSSLConnectionRequest; public delegate void OnSSLConnectionRequestHandler(object sender, SCIMDesktopSSLConnectionRequestEventArgs e); public class SCIMDesktopSSLConnectionRequestEventArgs : EventArgs { public string ConnectionId { get; } public string SupportedCipherSuites { get; } public string SupportedSignatureAlgs { get; } public int CertStoreType { get; set; } public string CertStore { get; set; } public string CertPassword { get; set; } public string CertSubject { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopSSLConnectionRequestEventArgs> OnSSLConnectionRequest; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopSSLConnectionRequestEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string SupportedCipherSuites { get; } public string SupportedSignatureAlgs { get; } public int CertStoreType { get; set; } public string CertStore { get; set; } public string CertPassword { get; set; } public string CertSubject { get; set; } }
Public Event OnSSLConnectionRequest As OnSSLConnectionRequestHandler Public Delegate Sub OnSSLConnectionRequestHandler(sender As Object, e As SCIMDesktopSSLConnectionRequestEventArgs) Public Class SCIMDesktopSSLConnectionRequestEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property SupportedCipherSuites As String Public ReadOnly Property SupportedSignatureAlgs As String Public Property CertStoreType As Integer Public Property CertStore As String Public Property CertPassword As String Public Property CertSubject As String End Class Async Version Public Event OnSSLConnectionRequest As AsyncEventHandler(Of SCIMDesktopSSLConnectionRequestEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopSSLConnectionRequestEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property SupportedCipherSuites As String Public ReadOnly Property SupportedSignatureAlgs As String Public Property CertStoreType As Integer Public Property CertStore As String Public Property CertPassword As String Public Property CertSubject As String End Class
Remarks
This event fires when an SSL connection is requested and SSLProvider is set to Internal. This event provides an opportunity to select an alternative certificate to the connecting client. This event does not fire when SSLProvider is set to Platform.
This event allows the component to be configured to use both RSA and ECDSA certificates depending on the connecting client's capabilities.
ConnectionId is the connection Id of the client requesting the connection.
SupportedCipherSuites is a comma-separated list of cipher suites that the client supports.
SupportedSignatureAlgs is a comma-separated list of certificate signature algorithms that the client supports.
CertStoreType is the store type of the alternate certificate to use for this connection. The component supports both public and private keys in a variety of formats. When the cstAuto value is used, the component will automatically determine the type. This field can take one of the following values:
| 0 (cstUser - default) | For Windows, this specifies that the certificate store is a certificate store owned by the current user.
NOTE: This store type is not available in Java. |
| 1 (cstMachine) | For Windows, this specifies that the certificate store is a machine store.
NOTE: This store type is not available in Java. |
| 2 (cstPFXFile) | The certificate store is the name of a PFX (PKCS#12) file containing certificates. |
| 3 (cstPFXBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in PFX (PKCS#12) format. |
| 4 (cstJKSFile) | The certificate store is the name of a Java Key Store (JKS) file containing certificates.
NOTE: This store type is only available in Java. |
| 5 (cstJKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in Java Key Store (JKS) format.
NOTE: This store type is only available in Java. |
| 6 (cstPEMKeyFile) | The certificate store is the name of a PEM-encoded file that contains a private key and an optional certificate. |
| 7 (cstPEMKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a private key and an optional certificate. |
| 8 (cstPublicKeyFile) | The certificate store is the name of a file that contains a PEM- or DER-encoded public key certificate. |
| 9 (cstPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a PEM- or DER-encoded public key certificate. |
| 10 (cstSSHPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains an SSH-style public key. |
| 11 (cstP7BFile) | The certificate store is the name of a PKCS#7 file containing certificates. |
| 12 (cstP7BBlob) | The certificate store is a string (binary) representing a certificate store in PKCS#7 format. |
| 13 (cstSSHPublicKeyFile) | The certificate store is the name of a file that contains an SSH-style public key. |
| 14 (cstPPKFile) | The certificate store is the name of a file that contains a PPK (PuTTY Private Key). |
| 15 (cstPPKBlob) | The certificate store is a string (binary) that contains a PPK (PuTTY Private Key). |
| 16 (cstXMLFile) | The certificate store is the name of a file that contains a certificate in XML format. |
| 17 (cstXMLBlob) | The certificate store is a string that contains a certificate in XML format. |
| 18 (cstJWKFile) | The certificate store is the name of a file that contains a JWK (JSON Web Key). |
| 19 (cstJWKBlob) | The certificate store is a string that contains a JWK (JSON Web Key). |
| 21 (cstBCFKSFile) | The certificate store is the name of a file that contains a BCFKS (Bouncy Castle FIPS Key Store).
NOTE: This store type is only available in Java and .NET. |
| 22 (cstBCFKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in BCFKS (Bouncy Castle FIPS Key Store) format.
NOTE: This store type is only available in Java and .NET. |
| 23 (cstPKCS11) | The certificate is present on a physical security key accessible via a PKCS#11 interface.
To use a security key, create a new Certificate object and pass cstPKCS11 as the StoreType, the full path of the PKCS#11 DLL as the Store, and the PIN as the StorePassword. Code Example. SSH Authentication with Security Key (without CertMgr):
Alternatively, collect the necessary data using the CertMgr component by calling the ListStoreCertificates method after setting the corresponding properties accordingly. The certificate information returned in the CertList event's CertEncoded parameter may be saved for later use. When using a certificate obtained with this approach, pass the previously saved security key information as the Store and set StorePassword to the PIN. Code Example. SSH Authentication with Security Key (with CertMgr):
|
| 99 (cstAuto) | The store type is automatically detected from the input data. This setting may be used with both public and private keys and can detect any of the supported formats automatically. |
CertStore is the store name or location of the alternate certificate to use for this connection.
Designations of certificate stores are platform dependent.
The following designations are the most common User and Machine certificate stores in Windows:
| MY | A certificate store holding personal certificates with their associated private keys. |
| CA | Certifying authority certificates. |
| ROOT | Root certificates. |
When the certificate store type is cstPFXFile, this property must be set to the name of the file. When the type is cstPFXBlob, the property must be set to the binary contents of a PFX file (i.e., PKCS#12 certificate store).
CertPassword is the password of the certificate store containing the alternate certificate to use for this connection.
CertSubject is the subject of the alternate certificate to use for this connection.
The special value * matches any subject and will select the first certificate in the store. The certificate subject is a comma-separated list of distinguished name fields and values. For instance, "CN=www.server.com, OU=test, C=US, E=example@email.com". Common fields and their meanings are as follows:
| Field | Meaning |
| CN | Common Name. This is commonly a hostname like www.server.com. |
| O | Organization |
| OU | Organizational Unit |
| L | Locality |
| S | State |
| C | Country |
| E | Email Address |
If a field value contains a comma, it must be quoted.
SSLStatus Event (SCIMDesktop Component)
This event is fired to show the progress of the secure connection.
Syntax
public event OnSSLStatusHandler OnSSLStatus; public delegate void OnSSLStatusHandler(object sender, SCIMDesktopSSLStatusEventArgs e); public class SCIMDesktopSSLStatusEventArgs : EventArgs { public string ConnectionId { get; } public string Message { get; } } Async Version public event AsyncEventHandler<SCIMDesktopSSLStatusEventArgs> OnSSLStatus; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopSSLStatusEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string Message { get; } }
Public Event OnSSLStatus As OnSSLStatusHandler Public Delegate Sub OnSSLStatusHandler(sender As Object, e As SCIMDesktopSSLStatusEventArgs) Public Class SCIMDesktopSSLStatusEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property Message As String End Class Async Version Public Event OnSSLStatus As AsyncEventHandler(Of SCIMDesktopSSLStatusEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopSSLStatusEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property Message As String End Class
Remarks
The event is fired for informational and logging purposes only. It is used to track the progress of the connection.
UpdateGroup Event (SCIMDesktop Component)
Fired after the current group has been loaded and a replace or update request has been applied.
Syntax
public event OnUpdateGroupHandler OnUpdateGroup; public delegate void OnUpdateGroupHandler(object sender, SCIMDesktopUpdateGroupEventArgs e); public class SCIMDesktopUpdateGroupEventArgs : EventArgs { public string ConnectionId { get; } public string GroupId { get; } public string ExternalId { get; } public string DisplayName { get; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopUpdateGroupEventArgs> OnUpdateGroup; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopUpdateGroupEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string GroupId { get; } public string ExternalId { get; } public string DisplayName { get; } public int StatusCode { get; set; } }
Public Event OnUpdateGroup As OnUpdateGroupHandler Public Delegate Sub OnUpdateGroupHandler(sender As Object, e As SCIMDesktopUpdateGroupEventArgs) Public Class SCIMDesktopUpdateGroupEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property GroupId As String Public ReadOnly Property ExternalId As String Public ReadOnly Property DisplayName As String Public Property StatusCode As Integer End Class Async Version Public Event OnUpdateGroup As AsyncEventHandler(Of SCIMDesktopUpdateGroupEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopUpdateGroupEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property GroupId As String Public ReadOnly Property ExternalId As String Public ReadOnly Property DisplayName As String Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a PUT /Groups/{id} or PATCH /Groups/{id} request from the Identity Provider. For PUT, the event parameters reflect the full group representation from the request body directly. For PATCH, the component first retrieves the current group via the GetGroup event, applies the patch operations, then fires this event.
For a PUT request, the ExternalId parameter contains the externalId value from the request body, or "" (empty string) if not provided.
For a PUT request, the provided DisplayName and member list should be applied to the group identified by GroupId, and any attributes not present in the request should be cleared. For a PATCH request, the event parameters likewise reflect the complete final group, with the values loaded through the GetGroup event and the patch operations applied on top. All parameters should be applied in the same way, since any attribute the patch did not touch carries its original value.
Updated members are made available via the GroupMembers collection. The collection always reflects the full current member list after the request is applied. All stored members should be replaced with the collection contents.
When the update succeeds, StatusCode must be set to 200. It may also be set to 204, which is valid when the updated resource does not need to be returned, causing the component to return a 204 No Content response with no body. Some Identity Providers require a 200 response with the updated resource body. Check your Identity Provider's SCIM implementation guide before returning 204. If the group is not found, StatusCode must be set to 404. The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
UpdateUser Event (SCIMDesktop Component)
Fired after the current user has been loaded and a replace or update request has been applied.
Syntax
public event OnUpdateUserHandler OnUpdateUser; public delegate void OnUpdateUserHandler(object sender, SCIMDesktopUpdateUserEventArgs e); public class SCIMDesktopUpdateUserEventArgs : EventArgs { public string ConnectionId { get; } public string UserId { get; } public string ExternalId { get; } public string UserName { get; } public string GivenName { get; } public string FamilyName { get; } public string DisplayName { get; } public bool Active { get; } public int StatusCode { get; set; } } Async Version public event AsyncEventHandler<SCIMDesktopUpdateUserEventArgs> OnUpdateUser; public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e); public class SCIMDesktopUpdateUserEventArgs : AsyncEventArgs { public CancellationToken CancellationToken { get; } public string ConnectionId { get; } public string UserId { get; } public string ExternalId { get; } public string UserName { get; } public string GivenName { get; } public string FamilyName { get; } public string DisplayName { get; } public bool Active { get; } public int StatusCode { get; set; } }
Public Event OnUpdateUser As OnUpdateUserHandler Public Delegate Sub OnUpdateUserHandler(sender As Object, e As SCIMDesktopUpdateUserEventArgs) Public Class SCIMDesktopUpdateUserEventArgs Inherits EventArgs Public ReadOnly Property ConnectionId As String Public ReadOnly Property UserId As String Public ReadOnly Property ExternalId As String Public ReadOnly Property UserName As String Public ReadOnly Property GivenName As String Public ReadOnly Property FamilyName As String Public ReadOnly Property DisplayName As String Public ReadOnly Property Active As Boolean Public Property StatusCode As Integer End Class Async Version Public Event OnUpdateUser As AsyncEventHandler(Of SCIMDesktopUpdateUserEventArgs) Public Delegate Function AsyncEventHandler(Of TEventArgs)(sender As Object, e As TEventArgs) As Task Public Class SCIMDesktopUpdateUserEventArgs Inherits AsyncEventArgs Public ReadOnly Property CancellationToken As CancellationToken Public ReadOnly Property ConnectionId As String Public ReadOnly Property UserId As String Public ReadOnly Property ExternalId As String Public ReadOnly Property UserName As String Public ReadOnly Property GivenName As String Public ReadOnly Property FamilyName As String Public ReadOnly Property DisplayName As String Public ReadOnly Property Active As Boolean Public Property StatusCode As Integer End Class
Remarks
This event fires when the component receives a PUT /Users/{id} or PATCH /Users/{id} request from the Identity Provider. For PUT, the event parameters reflect the full user representation from the request body directly. For PATCH, the component first retrieves the current user via the GetUser event, applies the patch operations, then fires this event.
For a PUT request, the ExternalId parameter contains the externalId value from the request body, or "" (empty string) if not provided.
For a PUT request, all event parameters should be applied to the user identified by UserId, and any attributes not present in the request should be cleared. For a PATCH request, the event parameters likewise reflect the complete final user, with the values loaded through the GetUser event and the patch operations applied on top. All parameters should be applied in the same way, since any attribute the patch did not touch carries its original value.
The Active parameter reflects the user's active state. For a PUT request, Active defaults to true if active is absent from the request body.
Email addresses and phone numbers are made available via the UserEmails and UserPhones collections. The collections always reflect the full current state of the user after the request is applied. All stored entries should be replaced with the collection contents. Enterprise extension attributes are made available via the UserExtension property and likewise reflect the full current state after the request is applied.
When the update succeeds, StatusCode must be set to 200. It may also be set to 204, which is valid when the updated resource does not need to be returned, causing the component to return a 204 No Content response with no body. Some Identity Providers require a 200 response with the updated resource body. Check your Identity Provider's SCIM implementation guide before returning 204. If the user is not found, StatusCode must be set to 404. The StatusCode parameter defaults to 500, and a value of 0 is treated as 200.
The ConnectionId parameter identifies the client connection. The value is first provided by the Connected event and may be used to correlate events that are fired for the same connection.
Certificate Type
This is the digital certificate being used.
Remarks
This type describes the current digital certificate. The certificate may be a public or private key. The fields are used to identify or select certificates.
- EffectiveDate
- ExpirationDate
- ExtendedKeyUsage
- Fingerprint
- FingerprintSHA1
- FingerprintSHA256
- Issuer
- PrivateKey
- PrivateKeyAvailable
- PrivateKeyContainer
- PublicKey
- PublicKeyAlgorithm
- PublicKeyLength
- SerialNumber
- SignatureAlgorithm
- Store
- StorePassword
- StoreType
- SubjectAltNames
- ThumbprintMD5
- ThumbprintSHA1
- ThumbprintSHA256
- Usage
- UsageFlags
- Version
- Subject
- Encoded
Fields
EffectiveDate
string (read-only)
Default:
""
The date on which this certificate becomes valid. Before this date, it is not valid. The date is localized to the system's time zone. The following example illustrates the format of an encoded date:
23-Jan-2000 15:00:00.
ExpirationDate
string (read-only)
Default:
""
The date on which the certificate expires. After this date, the certificate will no longer be valid. The date is localized to the system's time zone. The following example illustrates the format of an encoded date:
23-Jan-2001 15:00:00.
ExtendedKeyUsage
string (read-only)
Default:
""
A comma-delimited list of extended key usage identifiers. These are the same as ASN.1 object identifiers (OIDs).
Fingerprint
string (read-only)
Default:
""
The hex-encoded, 16-byte MD5 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.
The following example illustrates the format: bc:2a:72:af:fe:58:17:43:7a:5f:ba:5a:7c:90:f7:02
FingerprintSHA1
string (read-only)
Default:
""
The hex-encoded, 20-byte SHA-1 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.
The following example illustrates the format: 30:7b:fa:38:65:83:ff:da:b4:4e:07:3f:17:b8:a4:ed:80:be:ff:84
FingerprintSHA256
string (read-only)
Default:
""
The hex-encoded, 32-byte SHA-256 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.
The following example illustrates the format: 6a:80:5c:33:a9:43:ea:b0:96:12:8a:64:96:30:ef:4a:8a:96:86:ce:f4:c7:be:10:24:8e:2b:60:9e:f3:59:53
Issuer
string (read-only)
Default:
""
The issuer of the certificate. This field contains a string representation of the name of the issuing authority for the certificate.
PrivateKey
string (read-only)
Default:
""
The private key of the certificate (if available). The key is provided as PEM/Base64-encoded data.
NOTE: The PrivateKey may be available but not exportable. In this case, PrivateKey returns an empty string.
PrivateKeyAvailable
bool (read-only)
Default:
false
Whether a PrivateKey is available for the selected certificate. If PrivateKeyAvailable is True, the certificate may be used for authentication purposes (e.g., server authentication).
PrivateKeyContainer
string (read-only)
Default:
""
The name of the PrivateKey container for the certificate (if available). This functionality is available only on Windows platforms.
PublicKey
string (read-only)
Default:
""
The public key of the certificate. The key is provided as PEM/Base64-encoded data.
PublicKeyAlgorithm
string (read-only)
Default:
""
The textual description of the certificate's public key algorithm. The property contains either the name of the algorithm (e.g., "RSA" or "RSA_DH") or an object identifier (OID) string representing the algorithm.
PublicKeyLength
int (read-only)
Default:
0
The length of the certificate's public key (in bits). Common values are 512, 1024, and 2048.
SerialNumber
string (read-only)
Default:
""
The serial number of the certificate encoded as a string. The number is encoded as a series of hexadecimal digits, with each pair representing a byte of the serial number.
SignatureAlgorithm
string (read-only)
Default:
""
The text description of the certificate's signature algorithm. The property contains either the name of the algorithm (e.g., "RSA" or "RSA_MD5RSA") or an object identifier (OID) string representing the algorithm.
Store
string
Default:
"MY"
The name of the certificate store for the client certificate.
The StoreType field denotes the type of the certificate store specified by Store. If the store is password-protected, specify the password in StorePassword.
Store is used in conjunction with the Subject field to specify client certificates. If Store has a value, and Subject or Encoded is set, a search for a certificate is initiated. Please see the Subject field for details.
Designations of certificate stores are platform dependent.
The following designations are the most common User and Machine certificate stores in Windows:
| MY | A certificate store holding personal certificates with their associated private keys. |
| CA | Certifying authority certificates. |
| ROOT | Root certificates. |
When the certificate store type is cstPFXFile, this property must be set to the name of the file. When the type is cstPFXBlob, the property must be set to the binary contents of a PFX file (i.e., PKCS#12 certificate store).
StoreB
byte []
Default:
"MY"
The name of the certificate store for the client certificate.
The StoreType field denotes the type of the certificate store specified by Store. If the store is password-protected, specify the password in StorePassword.
Store is used in conjunction with the Subject field to specify client certificates. If Store has a value, and Subject or Encoded is set, a search for a certificate is initiated. Please see the Subject field for details.
Designations of certificate stores are platform dependent.
The following designations are the most common User and Machine certificate stores in Windows:
| MY | A certificate store holding personal certificates with their associated private keys. |
| CA | Certifying authority certificates. |
| ROOT | Root certificates. |
When the certificate store type is cstPFXFile, this property must be set to the name of the file. When the type is cstPFXBlob, the property must be set to the binary contents of a PFX file (i.e., PKCS#12 certificate store).
StorePassword
string
Default:
""
If the type of certificate store requires a password, this field is used to specify the password needed to open the certificate store.
StoreType
CertStoreTypes
Default:
0
The type of certificate store for this certificate.
The component supports both public and private keys in a variety of formats. When the cstAuto value is used, the component will automatically determine the type. This field can take one of the following values:
| 0 (cstUser - default) | For Windows, this specifies that the certificate store is a certificate store owned by the current user.
NOTE: This store type is not available in Java. |
| 1 (cstMachine) | For Windows, this specifies that the certificate store is a machine store.
NOTE: This store type is not available in Java. |
| 2 (cstPFXFile) | The certificate store is the name of a PFX (PKCS#12) file containing certificates. |
| 3 (cstPFXBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in PFX (PKCS#12) format. |
| 4 (cstJKSFile) | The certificate store is the name of a Java Key Store (JKS) file containing certificates.
NOTE: This store type is only available in Java. |
| 5 (cstJKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in Java Key Store (JKS) format.
NOTE: This store type is only available in Java. |
| 6 (cstPEMKeyFile) | The certificate store is the name of a PEM-encoded file that contains a private key and an optional certificate. |
| 7 (cstPEMKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a private key and an optional certificate. |
| 8 (cstPublicKeyFile) | The certificate store is the name of a file that contains a PEM- or DER-encoded public key certificate. |
| 9 (cstPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a PEM- or DER-encoded public key certificate. |
| 10 (cstSSHPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains an SSH-style public key. |
| 11 (cstP7BFile) | The certificate store is the name of a PKCS#7 file containing certificates. |
| 12 (cstP7BBlob) | The certificate store is a string (binary) representing a certificate store in PKCS#7 format. |
| 13 (cstSSHPublicKeyFile) | The certificate store is the name of a file that contains an SSH-style public key. |
| 14 (cstPPKFile) | The certificate store is the name of a file that contains a PPK (PuTTY Private Key). |
| 15 (cstPPKBlob) | The certificate store is a string (binary) that contains a PPK (PuTTY Private Key). |
| 16 (cstXMLFile) | The certificate store is the name of a file that contains a certificate in XML format. |
| 17 (cstXMLBlob) | The certificate store is a string that contains a certificate in XML format. |
| 18 (cstJWKFile) | The certificate store is the name of a file that contains a JWK (JSON Web Key). |
| 19 (cstJWKBlob) | The certificate store is a string that contains a JWK (JSON Web Key). |
| 21 (cstBCFKSFile) | The certificate store is the name of a file that contains a BCFKS (Bouncy Castle FIPS Key Store).
NOTE: This store type is only available in Java and .NET. |
| 22 (cstBCFKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in BCFKS (Bouncy Castle FIPS Key Store) format.
NOTE: This store type is only available in Java and .NET. |
| 23 (cstPKCS11) | The certificate is present on a physical security key accessible via a PKCS#11 interface.
To use a security key, create a new Certificate object and pass cstPKCS11 as the StoreType, the full path of the PKCS#11 DLL as the Store, and the PIN as the StorePassword. Code Example. SSH Authentication with Security Key (without CertMgr):
Alternatively, collect the necessary data using the CertMgr component by calling the ListStoreCertificates method after setting the corresponding properties accordingly. The certificate information returned in the CertList event's CertEncoded parameter may be saved for later use. When using a certificate obtained with this approach, pass the previously saved security key information as the Store and set StorePassword to the PIN. Code Example. SSH Authentication with Security Key (with CertMgr):
|
| 99 (cstAuto) | The store type is automatically detected from the input data. This setting may be used with both public and private keys and can detect any of the supported formats automatically. |
SubjectAltNames
string (read-only)
Default:
""
Comma-separated lists of alternative subject names for the certificate.
ThumbprintMD5
string (read-only)
Default:
""
The MD5 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.
ThumbprintSHA1
string (read-only)
Default:
""
The SHA-1 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.
ThumbprintSHA256
string (read-only)
Default:
""
The SHA-256 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.
Usage
string (read-only)
Default:
""
The text description of UsageFlags.
This value will be one or more of the following strings and will be separated by commas:
- Digital Signature
- Non-Repudiation
- Key Encipherment
- Data Encipherment
- Key Agreement
- Certificate Signing
- CRL Signing
- Encipher Only
If the provider is OpenSSL, the value is a comma-separated list of X.509 certificate extension names.
UsageFlags
int (read-only)
Default:
0
The flags that show intended use for the certificate. The value of UsageFlags is a combination of the following flags:
| 0x80 | Digital Signature |
| 0x40 | Non-Repudiation |
| 0x20 | Key Encipherment |
| 0x10 | Data Encipherment |
| 0x08 | Key Agreement |
| 0x04 | Certificate Signing |
| 0x02 | CRL Signing |
| 0x01 | Encipher Only |
Please see the Usage field for a text representation of UsageFlags.
This functionality currently is not available when the provider is OpenSSL.
Version
string (read-only)
Default:
""
The certificate's version number. The possible values are the strings "V1", "V2", and "V3".
Subject
string
Default:
""
The subject of the certificate used for client authentication.
This field will be populated with the full subject of the loaded certificate. When loading a certificate, the subject is used to locate the certificate in the store.
If an exact match is not found, the store is searched for subjects containing the value of the property.
If a match is still not found, the property is set to an empty string, and no certificate is selected.
The special value "*" picks a random certificate in the certificate store.
The certificate subject is a comma-separated list of distinguished name fields and values. For instance, "CN=www.server.com, OU=test, C=US, E=example@email.com". Common fields and their meanings are as follows:
| Field | Meaning |
| CN | Common Name. This is commonly a hostname like www.server.com. |
| O | Organization |
| OU | Organizational Unit |
| L | Locality |
| S | State |
| C | Country |
| E | Email Address |
If a field value contains a comma, it must be quoted.
Encoded
string
Default:
""
The certificate (PEM/Base64 encoded). This field is used to assign a specific certificate. The Store and Subject fields also may be used to specify a certificate.
When Encoded is set, a search is initiated in the current Store for the private key of the certificate. If the key is found, Subject is updated to reflect the full subject of the selected certificate; otherwise, Subject is set to an empty string.
EncodedB
byte []
Default:
""
The certificate (PEM/Base64 encoded). This field is used to assign a specific certificate. The Store and Subject fields also may be used to specify a certificate.
When Encoded is set, a search is initiated in the current Store for the private key of the certificate. If the key is found, Subject is updated to reflect the full subject of the selected certificate; otherwise, Subject is set to an empty string.
Constructors
public Certificate();
Public Certificate()
Creates a instance whose properties can be set.
public Certificate(string certificateFile);
Public Certificate(ByVal CertificateFile As String)
Opens CertificateFile and reads out the contents as an X.509 public key.
public Certificate(byte[] encoded);
Public Certificate(ByVal Encoded As Byte())
Parses Encoded as an X.509 public key.
public Certificate(CertStoreTypes storeType, string store, string storePassword, string subject);
Public Certificate(ByVal StoreType As CertStoreTypes, ByVal Store As String, ByVal StorePassword As String, ByVal Subject As String)
StoreType identifies the type of certificate store to use. See for descriptions of the different certificate stores. Store is a file containing the certificate store. StorePassword is the password used to protect the store.
After the store has been successfully opened, the component will attempt to find the certificate identified by Subject . This can be either a complete or a substring match of the X.509 certificate's subject Distinguished Name (DN). The Subject parameter can also take an MD5, SHA-1, or SHA-256 thumbprint of the certificate to load in a "Thumbprint=value" format.
public Certificate(CertStoreTypes storeType, string store, string storePassword, string subject, string configurationString);
Public Certificate(ByVal StoreType As CertStoreTypes, ByVal Store As String, ByVal StorePassword As String, ByVal Subject As String, ByVal ConfigurationString As String)
StoreType identifies the type of certificate store to use. See for descriptions of the different certificate stores. Store is a file containing the certificate store. StorePassword is the password used to protect the store.
ConfigurationString is a newline-separated list of name-value pairs that may be used to modify the default behavior. Possible values include "PersistPFXKey", which shows whether or not the PFX key is persisted after performing operations with the private key. This correlates to the PKCS12_NO_PERSIST_KEY CryptoAPI option. The default value is True (the key is persisted). "Thumbprint" - an MD5, SHA-1, or SHA-256 thumbprint of the certificate to load. When specified, this value is used to select the certificate in the store. This is applicable to the cstUser , cstMachine , cstPublicKeyFile , and cstPFXFile store types. "UseInternalSecurityAPI" shows whether the platform (default) or the internal security API is used when performing certificate-related operations.
After the store has been successfully opened, the component will attempt to find the certificate identified by Subject . This can be either a complete or a substring match of the X.509 certificate's subject Distinguished Name (DN). The Subject parameter can also take an MD5, SHA-1, or SHA-256 thumbprint of the certificate to load in a "Thumbprint=value" format.
public Certificate(CertStoreTypes storeType, string store, string storePassword, byte[] encoded);
Public Certificate(ByVal StoreType As CertStoreTypes, ByVal Store As String, ByVal StorePassword As String, ByVal Encoded As Byte())
StoreType identifies the type of certificate store to use. See for descriptions of the different certificate stores. Store is a file containing the certificate store. StorePassword is the password used to protect the store.
After the store has been successfully opened, the component will load Encoded as an X.509 certificate and search the opened store for a corresponding private key.
public Certificate(CertStoreTypes storeType, byte[] store, string storePassword, string subject);
Public Certificate(ByVal StoreType As CertStoreTypes, ByVal Store As Byte(), ByVal StorePassword As String, ByVal Subject As String)
StoreType identifies the type of certificate store to use. See for descriptions of the different certificate stores. Store is a byte array containing the certificate data. StorePassword is the password used to protect the store.
After the store has been successfully opened, the component will attempt to find the certificate identified by Subject . This can be either a complete or a substring match of the X.509 certificate's subject Distinguished Name (DN). The Subject parameter can also take an MD5, SHA-1, or SHA-256 thumbprint of the certificate to load in a "Thumbprint=value" format.
public Certificate(CertStoreTypes storeType, byte[] store, string storePassword, string subject, string configurationString);
Public Certificate(ByVal StoreType As CertStoreTypes, ByVal Store As Byte(), ByVal StorePassword As String, ByVal Subject As String, ByVal ConfigurationString As String)
StoreType identifies the type of certificate store to use. See for descriptions of the different certificate stores. Store is a byte array containing the certificate data. StorePassword is the password used to protect the store.
After the store has been successfully opened, the component will attempt to find the certificate identified by Subject . This can be either a complete or a substring match of the X.509 certificate's subject Distinguished Name (DN). The Subject parameter can also take an MD5, SHA-1, or SHA-256 thumbprint of the certificate to load in a "Thumbprint=value" format.
public Certificate(CertStoreTypes storeType, byte[] store, string storePassword, byte[] encoded);
Public Certificate(ByVal StoreType As CertStoreTypes, ByVal Store As Byte(), ByVal StorePassword As String, ByVal Encoded As Byte())
StoreType identifies the type of certificate store to use. See for descriptions of the different certificate stores. Store is a byte array containing the certificate data. StorePassword is the password used to protect the store.
After the store has been successfully opened, the component will load Encoded as an X.509 certificate and search the opened store for a corresponding private key.
SCIMEmail Type
An email address associated with a SCIM user.
Remarks
This type represents a single email address entry in a SCIM user resource, including its type classification and whether it is the primary address.
Fields
Address
string (read-only)
Default:
""
The email address.
This field contains the email address value.
EmailType
string (read-only)
Default:
""
The type of email address.
This field classifies the email address. Common values include work, home, and other.
Primary
bool (read-only)
Default:
false
Whether this is the primary email address.
This field indicates whether this email address is the user's primary address. Only one entry in the collection should have Primary set to true.
Constructors
SCIMExtension Type
Enterprise extension attributes associated with a SCIM user.
Remarks
This type represents the enterprise extension attributes defined by the urn:ietf:params:scim:schemas:extension:enterprise:2.0:User schema. It is exposed via the UserExtension property during create and update events, and populated via the AddUserExtension method in get and list events.
Fields
CostCenter
string (read-only)
Default:
""
The user's cost center.
This field identifies the cost center the user is associated with.
Department
string (read-only)
Default:
""
The user's department.
This field contains the name of the department the user belongs to.
Division
string (read-only)
Default:
""
The user's division.
This field contains the name of the division the user belongs to within the organization.
EmployeeNumber
string (read-only)
Default:
""
The user's employee number.
This field contains a string identifier for the user within the organization, such as a payroll or HR system identifier.
ManagerDisplayName
string (read-only)
Default:
""
The display name of the user's manager.
This field contains the human-readable name of the manager. It corresponds to the displayName sub-attribute of the manager complex attribute in the enterprise extension schema.
ManagerId
string (read-only)
Default:
""
The user identifier of the user's manager.
This field contains the identifier of the manager's user resource within the application. It corresponds to the value sub-attribute of the manager complex attribute in the enterprise extension schema.
ManagerRef
string (read-only)
Default:
""
The URI of the manager's user resource.
This field contains the full URI reference to the manager's user resource (e.g., /scim/v2/Users/{id}). It corresponds to the $ref sub-attribute of the manager complex attribute in the enterprise extension schema.
Organization
string (read-only)
Default:
""
The user's organization.
This field contains the name of the organization the user belongs to.
Constructors
public SCIMExtension();
Public SCIMExtension()
SCIMMember Type
A member entry associated with a SCIM group.
Remarks
This type represents a single member of a SCIM group resource, including the member's resource ID and display name.
Fields
MemberDisplay
string (read-only)
Default:
""
The display name of the group member.
This field contains the display name of the member user as provided by the Identity Provider. It may be empty if the Identity Provider did not supply a display name.
MemberId
string (read-only)
Default:
""
The SCIM resource ID of the group member.
This field contains the unique identifier of the member user as assigned by the service provider.
Constructors
public SCIMMember();
Public SCIMMember()
SCIMPhone Type
A phone number associated with a SCIM user.
Remarks
This type represents a single phone number entry in a SCIM user resource, including its type classification and whether it is the primary number.
Fields
PhoneType
string (read-only)
Default:
""
The type of phone number.
This field classifies the phone number. Common values include work, mobile, home, and other.
Primary
bool (read-only)
Default:
false
Whether this is the primary phone number.
This field indicates whether this phone number is the user's primary number. Only one entry in the collection should have Primary set to true.
Constructors
Config Settings (SCIMDesktop Component)
The component accepts one or more of the following configuration settings. Configuration settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the component, access to these internal properties is provided through the Config method.SCIMDesktop Config Settings
The default value * allows all clients. The BlockedClients configuration setting may instead be used to deny specific addresses while allowing all others.
This setting takes precedence over the AllowedClients configuration setting.
A missing header does not prevent the operation. When supplied, the header must equal the current ETag or be *. A non-matching value returns 412 Precondition Failed before the update or delete event fires.
On a GET /Users/{id} or GET /Groups/{id} request, the component also compares an incoming If-None-Match header against the current resource's ETag. When the header is present and equals the current ETag or *, a 304 Not Modified response is returned with no body instead of the resource representation.
This feature is disabled by default and should be enabled if the connecting Identity Provider requires versioned resources.
This setting does not suppress errors for a missing PatchOp schema, an empty Operations array, or an invalid operation name.
When the LogLevel configuration setting is set to 3, each ignored attribute path is recorded through the Log event. Attribute values and filter values are not included in this log entry.
| 0 | Listens on IPv4 only (default). |
| 1 | Listens on IPv6 only. |
| 2 | Listens on both IPv4 and IPv6. |
JSON XPath values are rooted at /json. For example, /json/displayName selects the displayName property, and /json/members/[1]/value selects the first member's value property. XPath indices are 1-based.
Requests with an empty or invalid JSON body clear the current JSON XPath state.
Base Config Settings
In some non-GUI applications, an invalid message loop may be discovered that will result in errant behavior. In these cases, setting GUIAvailable to false will ensure that the component does not attempt to process external events.
- Product: The product the license is for.
- Product Key: The key the license was generated from.
- License Source: Where the license was found (e.g., RuntimeLicense, License File).
- License Type: The type of license installed (e.g., Royalty Free, Single Server).
- Last Valid Build: The last valid build number for which the license will work.
Setting this configuration setting to true tells the component to use the internal implementation instead of using the system security libraries.
On Windows, this setting is set to false by default. On Linux/macOS, this setting is set to true by default.
NOTE: This setting is static. The value set is applicable to all components used in the application.
When this value is set, the product's system dynamic link library (DLL) is no longer required as a reference, as all unmanaged code is stored in that file.
Trappable Errors (SCIMDesktop Component)
SCIMDesktop Errors
| 961 | Authentication failed. The request was rejected because the AuthRequest event did not accept the credentials. |
| 962 | Invalid request. The request body could not be parsed as valid SCIM JSON, a required field is missing, a PATCH operation or path is not supported, or an If-Match precondition failed. |
| 963 | Unsupported operation. The requested HTTP method and resource type combination is not enabled in the SupportedOperations property. |
| 964 | Filter parse error. The SCIM filter expression supplied in a GET /Users or GET /Groups request could not be parsed. |
| 965 | Endpoint not found. The request URI does not match a SCIM endpoint under the BaseURL path, or it names a resource type or schema that does not exist. |
| 966 | Method not allowed. The HTTP method is not supported by the requested SCIM endpoint. |
The component may also return one of the following error codes, which are inherited from other components.