ComponentSpace

Forums



SAML Assertion ID Caching


SAML Assertion ID Caching

Author
Message
ComponentSpace
ComponentSpace
ComponentSpace Development
ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)

Group: Administrators
Posts: 3.2K, Visits: 11K

An identifier cache is maintained by the SAML component in order to check SAML assertion identifiers as part of replay attack detection at the service provider.

IIDCache Interface
The IIDCache interface manages identifiers used as part of the single sign-on process.

public interface IIDCache {
    bool Add(string id, DateTime expirationDateTime);
}

InMemoryIDCache
A default implementation, InMemoryIDCache, is included.
The InMemoryIDCache stores identifiers in an in-memory cache which is suitable in a single server configuration but is not suitable in a web farm.
Unless otherwise specified, the InMemoryIDCache is used.

DatabaseIDCache
In a web farm, an IIDCache implementation backed by a database, for example, is required.
The DatabaseIDCache stores identifiers in a database table which is suitable in a web farm.
The following code configures the database ID cache.

SAMLController.IDCache = new DatabaseIDCache();

The IDCache property should be set in the application’s Global.asax straight after having loaded the configuration.
An example SQL Server compact edition database, SAML.sdf, is included. To use this database for testing, copy the SAML.sdf to the application’s App_Data folder. Ensure that the account the application runs under has the correct file permissions to access this file. For example, give the IIS_IUSRS group full control.
The database consists of a single table, SAMLIdentifiers, with the following schema.


data:image/png;base64,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ERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVYQBEREREqsMAiIiIiFSHARARERGpDgMgIiIiUh0GQERERKQ6DICIiIhIdRgAERERkeowACIiIiLVOWMApNFooNfrg7+IiIiIRgadTgtNZ2enP/j7BJ1Oh2P5xeKbBgYDgyAiIiIaOVpb2/H/ARbmC99CpO68AAAAAElFTkSuQmCC 
 
The ID column is the SAML identifier e.g. the SAML assertion ID. The ExpirationDateTime is the date/time when the SAML identifier expires.
The default DatabaseIDCache constructor assumes a web.config connection string named SAML and that the table name is SAMLIdentifiers.

<add name="SAML" connectionString="Data Source=|DataDirectory|\SAML.sdf;Password=password;Persist Security Info=True" providerName="System.Data.SqlServerCe.4.0"/>

The high-level API MVC and web forms example service providers include a connection string in web.config for the example database.
It’s anticipated that, in many instances, the SAMLIdentifiers table would be added to an application’s existing database.
Alternatively, a separate database deployed to SQL Server or some other DBMS may be used.
The only requirement is that the table includes the specified columns.
Additional DatabaseIDCache constructors are available to specify the connection string name and table name.
The DatabaseIDCache class includes a DeleteExpired method that removes any expired IDs from the table. This method should be called periodically to maintain the table.
The StartDeletingExpired method may be called to schedule the removal of expired IDs on a regular basis as a background task.
Alternatively, the DeleteExpiredPriorToAdd property may be set to true to have the removal of expired IDs occur prior to adding a new ID.
There is also the option to maintain this table independently as part of general database maintenance.
However it is done, care should be taken to ensure this table doesn’t grow too large with expired rows.

Custom IDCache
If required, a custom IIDCache may be implemented.
The following code assume a CustomIDCache class has been implemented and configures this as the ID cache.

SAMLController.IDCache = new CustomIDCache();



Regards
ComponentSpace Development
sahaku
sahaku
New Member
New Member (1 reputation)New Member (1 reputation)New Member (1 reputation)New Member (1 reputation)New Member (1 reputation)New Member (1 reputation)New Member (1 reputation)New Member (1 reputation)New Member (1 reputation)

Group: Forum Members
Posts: 1, Visits: 8
HI I am trying to use Custom IDCache for asp.net application. But looks like I am missing CustomIDCache(); Looking for help to implement Custom caching.
ComponentSpace
ComponentSpace
ComponentSpace Development
ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)ComponentSpace Development (4.4K reputation)

Group: Administrators
Posts: 3.2K, Visits: 11K
The CustomIDCache is a class you write that implements the IIDCache interface. Of course, the name of the class doesn't have to be CustomIDCache.
What the post is trying to say is that you can implement your own IIDCache and set it by calling SAMLController.IDCache.

Regards
ComponentSpace Development
GO


Similar Topics


Execution: 0.000. 1 query. Compression Enabled.
Login
Existing Account
Email Address:


Password:


Select a Forum....












Forums, Documentation & Knowledge Base - ComponentSpace


Search