ASP.NET Core SAML Single Sign-On (SSO)
module gives the ability to enable SAML Single Sign-On for your ASP.NET core
applications. Using Single Sign-On you can use only one password to access
your ASP.NET core application and services. Our module is compatible with all
the SAML compliant Identity providers. Here we will go through a step-by-step
guide to configure Single Sign-On (SSO) between ASP.NET Core and PingFederate
considering PingFederate as IdP. To know more about the features we provide
for ASP.NET Core SSO, click
here.
Platform Support: The ASP.NET Core SAML middleware supports ASP.NET
Core 2.1 and above. It supports all the ASP.NET Core platforms, including
Windows, Linux and macOS.
Pre-requisites: Download And Installation
-
Download
the ASP.NET Core SSO SAML 2.0 Middleware.
-
For setting up the module, extract the
asp-net-core-saml-middleware-xxx.zip, you will find a DLL file
miniorange-saml-sso.dll
-
Add the reference miniorange-saml-sso.dll file in your
application.
Note: To integrate the miniOrange ASP.NET SAML SSO middleware in your application, you will be required to add the below namespaces, services and middleware in your project (marked in green), below here is a sample example
using miniOrange.saml;
using System.Reflection;
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration {get;}
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddminiOrangeServices(Assembly.GetExecutingAssembly());
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseStaticFiles();
app.UseminiOrangeSAMLSSOMiddleware();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
using miniOrange.saml;
using System.Reflection;
var builder=WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddminiOrangeServices(Assembly.GetExecutingAssembly());
var app = builder.Build();
if(!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseStaticFiles();
app.UseminiOrangeSAMLSSOMiddleware();
app.Run();
Steps to configure ASP.NET Core Single Sign-On (SSO) using PingFederate as IDP
1. Add module on ASP.NET Core application
-
After integration, open your browser and browse the connector dashboard with
the URL below:
https://<your-application-base-url>/?ssoaction=config
-
If the registration page or login page pops up, you have successfully added
the miniOrange ASP.NET middleware authentication SAML SSO connector to your
application.
-
Register or log in with your account by clicking the Register button
to configure the module.
2. Configure PingFederate as Identity Provider
-
Under the Plugin Settings tab, select PingFederate as your
identity provider from the list shown.
There are two ways detailed below with which you can get the SAML SP
metadata to configure onto your identity provider end.
A] Using SAML metadata URL or metadata file:
-
In the Plugin Settings menu, look for
Service Provider Settings. Under that, you can find the metadata
URL as well as the option to download the SAML metadata.
-
Copy metadata URL or download the metadata file to configure the same on
your identity provider end.
- You may refer to the screenshot below:
B] Uploading metadata manually:
-
From the Service Provider Settings section, you can manually copy
the service provider metadata like
SP Entity ID, ACS URL, Single Logout URL
and share it with your identity provider for configuration.
- You may refer to the screenshot below:
- Login to your Ping Federate User Admin dashboard.
-
Click on the Identity Provider in the left navigation
menu.
-
Under SP CONNECTION, click on
Create New button.
-
Select the Browser SSO Profiles connection template on
the Connection Type tab and click
Next.
-
Select Browser SSO on the Connection Options tab and click
Next.
-
Select File as the method for importing metadata and
click Choose file to choose the miniOrange SSO plugin’s
metadata on the Import Metadata tab. Click
Next.
-
Review the information on the Metadata Summary tab and
click Next.
-
In the General Info tab ensure that the
Service Provider’s Entity ID, Connection Name, and
Base URL fields pre-populate based on the metadata.
Click Next.
-
Navigate to the Browser SSO tab and click on the
Configure Browser SSO. You will be redirected to
Browser SSO Setup wizard.
-
Select the IdP-Initiated SSO and
SP-Initiated SSO options on the SAML Profiles tab and click
Next.
-
Enter your desired assertion validity time from on the
Assertion Lifetime tab and click Next. By default, it is
configured 5 minutes for both.
-
Navigate to the Assertion Creation and click on the Configure
Assertion Creation. You will be redirected to the assertion creation
setup wizard.
- In the Identity Mapping tab select STANDARD and click Next.
-
Select a Subject Name Format for the SAML_SUBJECT on the
Attribute Contract tab and click Next.
-
Click Map New Adapter Instance on the Authentication Source Mapping.
-
Select an Adapter Instance and click
Next. The adapter must include the user’s email
address.
-
Select the
Use only the adapter contract values in the SAML assertion option on the Mapping Method tab and click
Next.
-
Select your adapter instance as the
Source and the email as the Value
on the Attribute Contract Fulfilment tab and
click Next.
-
(Optional) Select any authorization conditions you would like on the
Issuance Criteria tab and click
Next.
- Click Done on the Summary.
-
Click Next on the
Authentication Source Mapping tab.
- Click Done on the Summary tab.
-
Click Next on the
Assertion Creation
-
Navigate to the Protocol Settings tab of the Browser SSO wizard and
click on the Configure Protocol settings.
-
Select POST for Binding and specify the single
sign-on endpoint URL in the Endpoint URL field on the
Assertion Consumer Service URL Click
Next.
-
Select POST on the
Allowable SAML Bindings tab and click
Next.
-
Select your desired signature policies for assertions on the
Signature Policy tab and click Next.
-
Select your desired encryption policy for assertions on the
Encryption Policy tab and click Next.
-
Click Done on the
Protocol Settings Summary tab.
-
Navigate to the Credentials and click on the
Configure Credentials. You will be redirected to the
Credentials setup wizard.
-
Select the Signing Certificate to use with the Single Sign-On service
and select Include the certificate in the signature element in the
Digital Signature Settings tab. Click Done.
- Click Done on the Summary.
-
Click Next on the Credentials.
-
Select Active for the
Connection Status on the
Activation & Summary tab and click
Save.
-
Now, navigate to the Ping Federate User Admin dashboardè Identity
Provide.
-
Click Manage All under SP Connections.
-
Click Export Metadata for the desired service provider
connection.
-
Click Export on the
Export & Summary tab and click
Done.
3. Configure ASP.NET SAML Module as Service Provider
There are two ways detailed below with which you can configure your SAML
identity provider metadata in the module.
A] Upload metadata using the Upload IDP Metadata button:
-
If your identity provider has provided you with the metadata URL or
metadata file (.xml format only), then you can simply configure the
identity provider metadata in the module using the
Upload IDP Metadata option.
- You may refer to the screenshot below:
-
You can choose any one of the options according to the metadata format
you have available.
B] Configure the identity provider metadata manually:
-
After configuring your Identity Provider, it will provide you
with IDP Entity ID, IDP Single Sign On URL and
SAML X509 Certificate fields respectively.
- Click Save to save your IDP details.
4. Testing SAML SSO
-
Click on the Test Configuration button to test whether the SAML
Configuration you’ve done is correct.
-
The screenshot below shows a successful result. Click on
SSO Integration to further continue with the SSO Integration.
-
If you are experiencing any error on the module end you’ll be shown with
the window similar to below.
- To troubleshoot the error you can follow the below steps:
-
Under
Troubleshoot
tab, enable the toggle to receive the plugin logs.
-
Once enabled, you will be able to retrieve plugin logs by navigating
to
Plugin Settings tab and clicking on Test Configuration.
-
Download the log file from the Troubleshoot tab to see
what went wrong.
-
You can share the log file with us at
aspnetsupport@xecurify.com
and our team will reach out to you to resolve your issue.
5. Attribute Mapping
-
After testing the configuration, Map your application attributes with
the Identity Provider (IdP) attributes.
-
Note: All the mapped attributes will be stored in the session so
that you can access them in your application.
6. Integration Code
-
This steps allow you to retrieve the SSO user information in your application in the form of user claims.
-
You can also look the setup tour to understand how the SSO integration would work in your asp.net middleware
application.
-
Just copy-paste that code snippet wherever you want to access the user
attributes.
-
Note:This trial middleware only supports user information in claims, retrieving user information in session
and headers is available in the premium plugin
- You can also copy the integration code from below:
string name="";
string claimtype="";
string claimvalue="";
if(User.Identity.IsAuthenticated)
{
foreach( var claim in User.Claims)
{
claimtype = claim.Type;
claimvalue = claim.Value;
}
var identity = (ClaimsIdentity)User.Identity;
IEnumerable claims = identity.Claims;
string mobileNumber = identity.FindFirst("mobileNumber")?.Value;
}
Note: All the mapped attributes will be stored in the claims to be accessed in your application.
If you want some assistance regarding the integration code, get in touch
with us at
aspnetsupport@xecurify.com
7. Login Settings
- Hover on Select Actions and click on Copy SSO Link.
-
Use the following URL as a link in the application from where you want
to perform SSO:
https://asp.net-middleware-base-url/?ssoaction=login
-
For example, you can use it as:
<a href=”https://asp.net-middleware-base-url/?ssoaction=login”>Log
in</a>
7. Login Settings
- Hover on Select Actions and click on Copy SSO Link.
-
Use the following URL as a link in the application from where you want
to perform SSO:
https://base-url/?ssoaction=login
-
For example, you can use it as:
<a href=”https://asp-net-middlewarebase-url/?ssoaction=login”>Log
in</a>
8. Logout Settings
-
Use the following URL as a link to your application from where you want
to perform SLO:
https://asp-net-middleware-base-url/?ssoaction=logout
-
For example, you can use it as:
<a href=”https://asp-net-middleware-base-url/?ssoaction=logout”>Log
out</a>
To configure your IDP, you can find the service provider's metadata in
appsetting.json file. For SP metadata, you can refer to the screenshot
below:
From miniOrange section, copy spentityid, acsurl and provide it to
your identity provider's team.
-
Once the service provider's metadata is configured on the IdP end,
you'll be provided with the IdP metadata file or metadata URL or
metadata URLs like IdP Entity Id, IdP SSO URL etc.
-
To configure your IDP metadata, navigate to
appsettings.json file. You will find the following settings in
the miniorange's JSON section
-
To configure your IDP directly, navigate to
appsettings.json file.
-
Configure the appropriate provided metadata and save the settings.
idp_cert |
Enter the IDP certificate against this field |
ssourl |
Enter the SSO URL against this field |
idp_issuer |
Enter the IDP Issuer against this field |
Attribute Mapping
-
Map your application attributes with the identity provider (IDP)
attributes.
-
Note: All the mapped attributes will be stored in the session so
that you can access them in your application.
Integration Code
-
Just copy-paste the code snippet wherever you want to access the user
attributes.
-
Note: All the mapped attributes will be stored in the session so
that you can access them in your application.
string name="";
string claimtype="";
string claimvalue="";
if(User.Identity.IsAuthenticated) {
name= User.Identity.Name;
foreach( var claim in User.Claims) {
claimtype = claim.Type;
claimValue = claim.Value;
}
}
You can configure the ASP.NET Core SAML 2.0 Single Sign-On (SSO) module with
any Identity Provider such as
ADFS, Azure AD, Bitium, centrify, G Suite, JBoss Keycloak, Okta, OneLogin,
Salesforce, AWS Cognito, OpenAM, Oracle, PingFederate, PingOne, RSA
SecureID, Shibboleth-2, Shibboleth-3, SimpleSAML, WSO2 or even with your own
custom identity provider. Check the list of identity providers
here.
Additional Resources
Need Help?
Not able to find your identity provider? Mail us on
aspnetsupport@xecurify.com
and we'll help you set up SSO with your IDP and for quick guidance (via
email/meeting) on your requirement and our team will help you to select the
best suitable solution/plan as per your requirement.