Я пытаюсь добавить поддержку аутентификации SAML для ASP. NET Core MVC приложения с ASP. NET Core Identity (не IdentityServer). Поток «работает» при тестировании с StubIdp - SAMLResponse POST помещен в /Saml2/Acs
, и я перенаправлен в приложение с Identity.External cook ie, но мой ClaimsPrincipal
пуст и не аутентифицирован. Даже если я использую NameID
пользователя, который уже существует в базе данных, заявки полностью пусты.
В журнале консоли я также вижу следующее:
Sustainsys.Saml2.AspNetCore2.Saml2Handler: Information: Successfully processed SAML response Microsoft.IdentityModel.Tokens.Saml2.Saml2Id and authenticated JohnDoe
Я установил пакет Sustainsys.Saml2.AspNetCore2 и добавил конфигурацию службы в startup.cs
следующим образом:
services.AddAuthentication()
.AddSaml2(async options =>
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
var certificateSecret = await keyVaultClient.GetSecretAsync($"https://{Configuration["KeyVaultName"]}.vault.azure.net/", Configuration["ServiceProviderCertName"]);
var privateKeyBytes = Convert.FromBase64String(certificateSecret.Value);
options.SPOptions.EntityId = new EntityId(Configuration["BaseUrl"] + "/Saml2");
options.SPOptions.ReturnUrl = new Uri(Configuration["BaseUrl"]);
IdentityProvider idp = new IdentityProvider(
new EntityId("https://stubidp.sustainsys.com/Metadata"), options.SPOptions)
{
LoadMetadata = true,
MetadataLocation = "https://stubidp.sustainsys.com/Metadata",
AllowUnsolicitedAuthnResponse = true
};
options.IdentityProviders.Add(idp);
options.SPOptions.ServiceCertificates.Add(new X509Certificate2(privateKeyBytes));
});
Configuration["BaseUrl"]
- это базовый URL моего приложения, в данном случае это порт localhost.
Я явно что-то упускаю, но не могу понять, что. Нужно ли каким-то образом явно подключать / сопоставлять службу Saml2 с ASP. NET Core Identity?