The accepted answer is outdated.
Recently AWS has released support for IDP-initiated SAML: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-SAML-session-initiation.html#cognito-user-pools-SAML-session-initiation-idp-initiation
To use IDP-initiated SAML, you simply toggle "Accept SP-initiated and and IdP-initiated SAML assertions" in your User Pool config like so:
To get the SAML IDP-initiated flow to work, you will need to configure the RelayState in the IDP. The relay state should look like this:
identity_provider<your_cognito_dip>&client_id<the_cognito_app_client_id>&scope=openid+profile+email+aws.cognito.signin.user.admin&response_type=code&redirect_uri=<your_callback>
When cognito invokes the callback URI, it will include the authorization code as a URL query param. In your application, you can parse the code out of the URL to get data for the authenticated user.