Ejemplo n.º 1
0
        private async Task <IActionResult> InternalLogin(SAMLRequestDto parameter, CancellationToken cancellationToken)
        {
            var nameId = string.Empty;

            if (User != null && User.Claims.Any())
            {
                nameId = User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value;
            }

            var result = await _singleSignOnHandler.Handle(parameter, nameId, cancellationToken);

            if (result.IsValid)
            {
                var location = await result.RelyingParty.GetAssertionLocation(_entityDescriptorStore, Saml.Constants.Bindings.HttpRedirect, cancellationToken);

                var uri            = new Uri(location);
                var redirectionUrl = MessageEncodingBuilder.EncodeHTTPBindingResponse(uri, result.Response.SerializeToXmlElement(), parameter.RelayState, _options.SigningCertificate, _options.SignatureAlg);
                return(Redirect(redirectionUrl));
            }

            return(RedirectToAction("Index", "Authenticate", new
            {
                SAMLRequest = parameter.SAMLRequest,
                RelayState = parameter.RelayState,
                area = result.Amr
            }));
        }
Ejemplo n.º 2
0
        protected override async Task HandleChallengeAsync(AuthenticationProperties properties)
        {
            var entityDescriptor = await GetEntityDescriptor(Options.IdpMetadataUrl, CancellationToken.None);

            var idp = entityDescriptor.Items.FirstOrDefault(i => i is IDPSSODescriptorType) as IDPSSODescriptorType;

            if (idp == null)
            {
                throw new SamlException(System.Net.HttpStatusCode.BadRequest, Constants.StatusCodes.Requester, Global.BadRelyingPartyIdpMetadata);
            }

            var ssoService = idp.SingleSignOnService.FirstOrDefault(s => s.Binding == Constants.Bindings.HttpRedirect);

            if (ssoService == null)
            {
                throw new SamlException(System.Net.HttpStatusCode.BadRequest, Constants.StatusCodes.UnsupportedBinding, Global.BadIDPSingleSignOnLocation);
            }

            var authnRequest       = BuildHttpGetBinding(ssoService.Location);
            var uri                = new Uri(ssoService.Location);
            var state              = Options.StateDataFormat.Protect(properties);
            var redirectionUrl     = MessageEncodingBuilder.EncodeHTTPBindingRequest(uri, authnRequest, state, Options.SigningCertificate, Options.SignatureAlg);
            var redirectionContext = new RedirectContext <SamlSpOptions>(
                Context,
                Scheme,
                Options,
                properties,
                redirectionUrl);
            await Events.RedirectToSsoEndpoint(redirectionContext);
        }