Я должен сказать, что я только начал изучать аутентификацию SAML и столкнулся с проблемой аутентификации, которую, к сожалению, я не могу воспроизвести на своем компьютере разработчика, что еще больше смущает меня.
У меня есть следующая конфигурация с использованием OWIN: *Переменная 1003 *
var options = new Saml2AuthenticationOptions(false)
{
Notifications = new Saml2Notifications
{
AuthenticationRequestCreated = (request, provider, dictionary) =>
{
request.Binding = Saml2BindingType.HttpPost;
}
},
AuthenticationType = services.AuthenticationType,
Caption = services.Caption,
SPOptions = new SPOptions
{
EntityId = new EntityId(Path.Combine(services.RelyingPartyUri, "Saml2"))
}
};
options.IdentityProviders.Add(new IdentityProvider(new EntityId(services.IdentityProviderConfiguration.IdentityProviderMetadataUri), options.SPOptions)
{
AllowUnsolicitedAuthnResponse = true,
Binding = Saml2BindingType.HttpPost,
LoadMetadata = true,
SingleSignOnServiceUrl = new Uri(services.IdentityProviderConfiguration.SingleSignOnUri)
});
app.UseSaml2Authentication(options);
services
содержит конфигурацию, такую как метаданные uri, sso uri и т. Д.
Эта конфигурация отлично работает на моем компьютере.Я проверил запрос SAML для входа в систему и вот что у меня там:
<saml2p:AuthnRequest
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
ID="id10c4b76119b64952857d38c7581ca0b4"
Version="2.0"
IssueInstant="2018-12-04T14:29:00Z"
Destination="https://identity.provider/trust/saml2/http-post/sso/application"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
AssertionConsumerServiceURL="https://application/Saml2/Acs">
<saml2:Issuer>https://application/Saml2</saml2:Issuer>
</saml2p:AuthnRequest>
Аутентификация тогда работает нормально.
Когда я несколько раз развертываю этот код на внешнем сервере для тестированияработает как положено, но довольно часто я не могу аутентифицировать пользователя, потому что вместо http-post механизм аутентификации использует http-redirect.
В этом случае я вижу следующий запрос SAML для входа в систему:
<saml2p:AuthnRequest
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
ID="id10c4b76119b64952857d38c7581ca0b4"
Version="2.0"
IssueInstant="2018-12-04T14:29:00Z"
Destination="https://identity.provider/trust/saml2/http-redirect/sso/application"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
AssertionConsumerServiceURL="https://application/Saml2/Acs">
<saml2:Issuer>https://application/Saml2</saml2:Issuer>
</saml2p:AuthnRequest>
Разница в URI единого входа, который используется для аутентификации.
До сих пор я проверял файлы конфигурации, чтобы устранить проблему конфигурации.Все конфигурации действительны и services.IdentityProviderConfiguration.SingleSignOnUri
содержит действительный URI единого входа с http-post.Я поиграл с разными настройками, и, как вы можете видеть из фрагмента кода, я установил Binding на HttpPost, который, как я думал, должен был решить мою проблему в случае, если SingleSignOnServiceUrl
автоматически берется из метаданных IDP.Я также просмотрел исходный код SustainS.SAML2 и не смог найти ничего, что могло бы дать мне подсказку.
Любая помощь высоко ценится!