AspNetSaml 2.0.0-beta
See the version list below for details.
dotnet add package AspNetSaml --version 2.0.0-beta
NuGet\Install-Package AspNetSaml -Version 2.0.0-beta
<PackageReference Include="AspNetSaml" Version="2.0.0-beta" />
paket add AspNetSaml --version 2.0.0-beta
#r "nuget: AspNetSaml, 2.0.0-beta"
// Install AspNetSaml as a Cake Addin #addin nuget:?package=AspNetSaml&version=2.0.0-beta&prerelease // Install AspNetSaml as a Cake Tool #tool nuget:?package=AspNetSaml&version=2.0.0-beta&prerelease
AspNetSaml
Very simple SAML 2.0 "consumer" implementation in C#.
It's a SAML client library, not a SAML server, allows adding SAML single-sign-on to your ASP.NET app, but not to provide auth services to other apps.
Installation
Install-Package AspNetSaml
This is a .NET Standard 2.0 library that works with both ASP.NET Core and the "old" ASP.NET Framework. Older versions were released as a single c-sharp file you could throw into your project, but starting with v2.0 this is a "proper" class library nuget package.
Usage
How SAML works?
SAML workflow has 2 steps:
- User is redirected to the SAML provider (where he authenticates)
- User is redirected back to your app, where you validate the payload
Here's how you do it (this example is for ASP.NET MVC):
1. Redirecting the user to the saml provider:
//this example is an ASP.NET MVC action method
public ActionResult Login()
{
//TODO: specify the SAML provider url here, aka "Endpoint"
var samlEndpoint = "http://saml-provider-that-we-use.com/login/";
var request = new AuthRequest(
"http://www.myapp.com", //TODO: put your app's "entity ID" here
"http://www.myapp.com/SamlConsume" //TODO: put Assertion Consumer URL (where the provider should redirect users after authenticating)
);
//redirect the user to the SAML provider
return Redirect(request.GetRedirectUrl(samlEndpoint));
}
2. User has been redirected back
User is sent back to your app - you need to validate the SAML response ("assertion") that you recieved via POST.
Here's an example of how you do it in ASP.NET MVC
//ASP.NET MVC action method... But you can easily modify the code for Web-forms etc.
public ActionResult SamlConsume()
{
// 1. TODO: specify the certificate that your SAML provider gave you
string samlCertificate = @"-----BEGIN CERTIFICATE-----
BLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAH123543==
-----END CERTIFICATE-----";
// 2. Let's read the data - SAML providers usually POST it into the "SAMLResponse" var
var samlResponse = new Response(samlCertificate, Request.Form["SAMLResponse"]);
// 3. We're done!
if (samlResponse.IsValid())
{
//WOOHOO!!! user is logged in
username = samlResponse.GetNameID();
}
}
Reading more attributes from the provider
SAML providers usually send more data with their response: username, first/last names etc. Here's how to get it:
if (samlResponse.IsValid())
{
//WOOHOO!!! user is logged in
//Some more optional stuff for you
//let's extract username/firstname etc
string username, email, firstname, lastname;
try
{
username = samlResponse.GetNameID();
email = samlResponse.GetEmail();
firstname = samlResponse.GetFirstName();
lastname = samlResponse.GetLastName();
}
catch(Exception ex)
{
//insert error handling code
//no, really, please do
return null;
}
//user has been authenticated, put your code here, like set a cookie or something...
//or call FormsAuthentication.SetAuthCookie()
//or call context.SignInAsync() in ASP.NET Core
//or do something else
}
Dependencies
Depending on your .NET version, your Project should reference System.Security
for .NET Framework and System.Security.Cryptography.Xml
for .NET Core.
A version of this library has been used for years in production in our helpdesk app.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Security.Cryptography.Xml (>= 6.0.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on AspNetSaml:
Package | Downloads |
---|---|
Infotekka.LightSaml
A very simple SAML impelmentation using Jitbit's AspNetSaml package: https://www.nuget.org/packages/AspNetSaml/2.1.0 |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2.1.2 | 181,637 | 1/5/2024 |
2.1.1 | 9,351 | 11/19/2023 |
2.1.0 | 39,985 | 7/10/2023 |
2.0.1 | 58,872 | 4/18/2023 |
2.0.0 | 14,440 | 1/27/2023 |
2.0.0-beta | 174 | 1/25/2023 |
1.2.5 | 63,817 | 5/24/2022 |
1.2.4 | 70,545 | 7/4/2021 |
1.2.3 | 89,918 | 9/17/2020 |
1.2.2 | 25,838 | 4/12/2020 |
1.2.1 | 116,770 | 3/12/2019 |
1.2.0 | 62,784 | 11/10/2017 |