Как заставить Saml2AuthenticationModule WIF SAML2 Extensions работать в эмуляторе вычислений Windows Azure? - PullRequest
3 голосов
/ 12 января 2012

В IIS Express использование модуля Saml2AuthenticationModule (из расширения WIF для протокола SAML2 ) приводит к следующему потоку приложений:

  1. Пользователь переходит на URL-адрес поставщика услуг, который вызывает Saml2AuthenticationModule.Current.SignIn (args);
  2. Модуль направляет запрос поставщику удостоверений.
  3. В зависимости от метаданных SP AssertionConsumerService IdP отправляет ответ SSO обратно SP. В моих текущих тестах этот URL-адрес "{rootdomain} / ServiceProvider/saml/post/ac". Насколько я могу судить, этот URL не настраивается.
  4. Модуль перехватывает этот ответ, выполняет настройку IClaimsIdentity, а затем перенаправляет поток обратно в приложение SP (аргумент передан на шаге 1).

При нацеливании на эмулятор Windows Azure вместо IIS Express я изменил файл web.config, чтобы он указывал на другой файл метаданных SP с другим AssertionConsumerService, который соответствует URL-адресу эмулятора:

<md:AssertionConsumerService index="1" 
    Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
    Location="https://127.0.0.1/ServiceProvider/saml/post/ac" />

При отладке в эмуляторе вычисления Azure поток останавливается после шага № 3. Когда он достигает шага № 4, я в итоге просматриваю страницу 404 для этого URL:

https://127.0.0.1/ServiceProvider/saml/post/ac

Что здесь происходит? Разве модуль не должен перехватывать этот URL и обрабатывать ответ SAML? Почему это работает в IIS Express, а не в эмуляторе вычислений Azure?

Вот web.config для SAML:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <add name="Saml2AuthenticationModule" 
            type="Microsoft.IdentityModel.Web.Saml2AuthenticationModule"/>
        <add name="SessionAuthenticationModule" 
            type="Microsoft.IdentityModel.Web.SessionAuthenticationModule"/>
    </modules>
    ...
</system.webServer>

...

<microsoft.identityModel>
    <service>
        <audienceUris>
            <add value="https://www.mydomain.com/saml2/development/azure"/>
        </audienceUris>
        <certificateValidation certificateValidationMode="None"/>
        <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry">
            <!-- The set of trusted issuers. -->
            <trustedIssuers>
                <add name="urn:samples:identityprovider" thumbprint="59 fc 9a da 58 86 31 8d 1d d5 f8 a6 0f 9a 53 f8 09 fc 0e 63"/>
            </trustedIssuers>
        </issuerNameRegistry>
        <serviceTokenResolver type="Samples.Saml.Utilities.SampleServiceProviderSecurityTokenResolver"/>
        <!-- Enable saveBootstrapTokens so the token visualizer can show the raw SAML assertion. -->
        <securityTokenHandlers>
            <securityTokenHandlerConfiguration saveBootstrapTokens="true">
            </securityTokenHandlerConfiguration>
        </securityTokenHandlers>
        <federatedAuthentication>
            <cookieHandler requireSsl="true"/>
        </federatedAuthentication>
    </service>
</microsoft.identityModel>

...

<microsoft.identityModel.saml metadata="saml2-azure.xml">
    <identityProviders>
        <metadata file="identityprovider.xml"/>
    </identityProviders>
</microsoft.identityModel.saml>

EntityID в saml2-azure имеет значение https://www.mydomain.com/saml2/development/azure, имеет указанный выше URL-адрес AssertionConsumerService и находится в тестируемом SP и IdP.

...