2015-09-15 1 views
0

Я новичок в Windows Identity Framework. Моя организация имеет несколько сред, которые используют разные имена «авторитет» и «конечная точка». Мое приложение может обнаруживать среду во время выполнения. Я просмотрел документацию WIF и через stackoverflow, и пока не могу найти что-нибудь, что я могу использовать, чтобы помочь мне с этой проблемой.WIF Framework для .NET MVC в нескольких средах?

В приведенном ниже примере работы в моей LOCALHOST среде:

<add key="ida:FederationMetadataLocation" value="https://test.login.mycompany.com/FederationMetadata/2007-  06/FederationMetadata1.xml" /> 
    <add key="ida:Realm" value="https://localhost/webapp" /> 
    <add key="ida:AudienceUri" value="https://localhost/webapp/" /> 

В моей среде разработки тот же участок должен быть:

<add key="ida:FederationMetadataLocation" value="https://dev.login.mycompany.com/FederationMetadata/2007-06/FederationMetadata1.xml" /> 
    <add key="ida:Realm" value="https://dev.mycompany.com/webapp" /> 
    <add key="ida:AudienceUri" value="https://dev.mycompany.com/webapp/" /> 

мне также нужно сделать аналогичные изменения в AudienceURIs а federationConfiguration.

Вот полный локальный web.config:

 <?xml version="1.0" encoding="utf-8"?> 

<configuration> 
    <configSections> 
    <!--Added for Windows Identity Framework --> 
     <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
    <!--END: Added for Windows Identity Framework --> 
    </configSections> 

    <appSettings> 
    <!--Added for Windows Identity Framework --> 
    <add key="ida:FederationMetadataLocation" value="https://test.login.mycompany.com/FederationMetadata/2007-06/FederationMetadata1.xml" /> 
    <add key="ida:Realm" value="https://localhost/webapp" /> 
    <add key="ida:AudienceUri" value="https://localhost/webapp/" /> 
    <!--END: Added for Windows Identity Framework --> 
    </appSettings> 
    <system.web> 
    ... 
    </system.web> 
    <system.webServer> 
    <!--Added for Windows Identity Framework --> 
    <modules> 
     <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
     <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
    </modules> 
    <!--END: Added for Windows Identity Framework --> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding ... 
    </assemblyBinding> 
    </runtime> 

    <!--Added for Windows Identity Framework --> 
    <system.identityModel> 
    <identityConfiguration> 
     <audienceUris> 
     <add value="https://localhost/webapp" /> 
     <add value="https://localhost/webapp/FederationResult/" /> 
     </audienceUris> 
     <securityTokenHandlers> 
     ... 
     </securityTokenHandlers> 
     <certificateValidation certificateValidationMode="None" /> 
     <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"> 
     <authority name="http://test.login.mycompany.com/adfs/services/trust"> 
      <keys> 
      <add thumbprint="123320493" /> 
      </keys> 
      <validIssuers> 
      <add name="http://test.login.mycompany.com/adfs/services/trust" /> 
      </validIssuers> 
     </authority> 
     </issuerNameRegistry> 
    </identityConfiguration> 
    </system.identityModel> 

    <system.identityModel.services> 
    <federationConfiguration> 
     <wsFederation 
     issuer="https://test.login.mycompany.com/adfs/ls/" 
     realm="https://localhost/webapp/" 
     reply="https://localhost/webapp/" 
     passiveRedirectEnabled="true" 
     requireHttps="true" /> 
     <cookieHandler name="LocalFedAuthRounding" requireSsl="true" /> 
    </federationConfiguration> 
    </system.identityModel.services> 

    <!--Added for Windows Identity Framework --> 

</configuration> 

Предусматривает ли WIF методы, чтобы сделать это? Я просмотрел документы и не могу понять, как сделать эти изменения.

Спасибо, Matt

ответ

0

Идентичность и доступа инструмент из Visual Studio позволяет только для одного «авторитета» в то время. Если вы хотите использовать разные полномочия для каждой среды (например, ваш сайт развернут в TST, прием и производство), вам необходимо будет рассмотреть преобразования веб-конфигурации во время развертывания, чтобы настроить правильные полномочия. Однако, если вам необходимо принять маркеры безопасности из нескольких источников на одном и том же развернутом веб-сайте, вам необходимо вручную объединить раздел для system.IdentityModel в один. Поддержка WIF (он будет каждый раз проверять каждый вариант), но IDA этого не делает. Часть system.identityModel.Services сложнее, так как именно там вы указываете WIF, как сделать перенаправление для пассивного сценария входа. Эта часть вам нужно будет сделать вручную в коде. Это не так сложно. В конце концов, вам просто нужно перенаправить на a-cleverly consist - url. Вы также можете использовать что-то вроде Windows AZure ACS или Thinktecture Identity Server для защиты различных поставщиков идентификаторов от вашего приложения. Поставщики удостоверений (полномочия на вашем языке) затем добавляются на уровне STS, и ваше приложение просто доверяет STS. Кроме того, не забудьте вывеску, которая должна быть перенаправлена ​​на тот же провайдер идентификации, с которым вы входили в первую очередь.

+0

Я не могу изменить конфигурацию при развертывании. Я развертываю в одну среду, а затем перехожу из этой среды в другую без повторного развертывания. Я думаю, что мне нужно что-то сделать в коде, чтобы указать на другой web.config для каждой среды. Кроме того, в коде должен быть какой-то способ сделать это ... –

0

Я ответил на очень похожий вопрос только в последнее время, но так как ответ не был принят, я не могу сделать свой вопрос дубликат этого один

Authentication against multiple identity providers using WSFederationAuthenticationModule for asp.net

В основном, вы делаете все, что в нескольких строки кода вместо того, чтобы полагаться на статическую конфигурацию.

Смежные вопросы