要持久化ExternalLoginInfo的声明,您可以使用ASP.NET Identity的用户存储机制来保存该信息。以下是一个示例解决方案,其中使用了ASP.NET Identity和Sustainsys Saml2。
ApplicationUser的自定义用户类,继承自IdentityUser类,并添加一个用于存储SAML声明的属性。例如:public class ApplicationUser : IdentityUser
{
public string SamlClaims { get; set; }
}
Startup.cs文件中的ConfigureServices方法中配置ASP.NET Identity,并注册自定义用户类。例如:public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
// ...
}
AccountController.cs文件中的ExternalLoginCallback方法中,获取SAML声明并将其保存到当前用户的SamlClaims属性中。例如:[HttpGet]
[AllowAnonymous]
public async Task ExternalLoginCallback(string returnUrl = null)
{
// ...
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
// Handle the error
}
// Extract the SAML claims and save them to the user
var samlClaims = info.Principal.Claims.Where(c => c.Type.StartsWith("urn:oasis:names:tc:SAML:2.0:"));
var user = await _userManager.GetUserAsync(User);
user.SamlClaims = JsonConvert.SerializeObject(samlClaims);
await _userManager.UpdateAsync(user);
// ...
}
SamlClaims属性来访问它们。例如:public IActionResult Index()
{
var user = await _userManager.GetUserAsync(User);
var samlClaims = JsonConvert.DeserializeObject(user.SamlClaims);
// Use the SAML claims as needed
return View();
}
这样,您就可以使用ASP.NET Identity和Sustainsys Saml2来持久化和访问ExternalLoginInfo的声明了。