2015-08-06 5 views
2

У меня есть много веб-приложений на одном и том же веб-сервере (II7): , скажем, mydomain/app1, mydomain/app2, ... и так далее. Я пытаюсь добавить аутентификацию ADFS через OWIN. Вот что я сделал:Как добавить несколько конечных точек для adfs

[assembly: OwinStartup(typeof(MyNamespace.Startup))] 
namespace MyNamespace 
{ 
public class Startup 
{ 
    private static string realm = ConfigurationManager.AppSettings["ida:Wtrealm"]; 
    private static string adfsMetadata = ConfigurationManager.AppSettings["ida:ADFSMetadata"]; 

    public void Configuration(IAppBuilder app) 
    { 
     ConfigureAuth(app); 

     app.Use((context, next) => 
     { 
      SignIn(context); 
      return next.Invoke(); 
     }); 
     app.UseStageMarker(PipelineStage.Authenticate); 
    } 

    public void ConfigureAuth(IAppBuilder app) 
    { 
     app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 

     app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

     app.UseWsFederationAuthentication(
      new WsFederationAuthenticationOptions 
      { 
       Wtrealm = realm, 
       MetadataAddress = adfsMetadata 
      }); 
    } 

    public void SignIn(IOwinContext context) 
    { 
     if (context.Authentication.User == null) 
     { 
      context.Authentication.Challenge(
       WsFederationAuthenticationDefaults.AuthenticationType); 
     } 
    } 
} 
} 

Когда доступ пользователя MYDOMAIN/app1, я хочу, чтобы пройти проверку подлинности через ADFS, а затем перенаправляется на MYDOMAIN/App1. И то же самое для пользователя, получающего доступ к mydomain/app2.

Но я хочу добавить только одну доверяющую сторону доверия в ADFS (потому что там много приложений, и все используют одни и те же правила требований).

Я пробовал разные конфигурации, но я не могу делать то, что я хочу:

  • если RP конечной точки MYDOMAIN/app1/аутентификация в порядке, но все запросы (даже от MYDOMAIN/app2 перенаправляются на app1), очевидно

  • , если конечная точка RP является только mydomain /, я получаю ошибку 405.0 http - метод не разрешен после перенаправления (я позабочусь о концевой косой чертой).

Для информации, я видел этот вопрос на StackOverflow: URL redirection from ADFS server

Но это не реально ответить моя проблема, потому что я не понимаю фразу «(...) WIF будет обрабатывать ответ в URL_1, а затем позаботьтесь о перенаправлении пользователя на URL_2 "в комментарии Эндрю Лавьера.

Как добавить несколько конечных точек в один доверенный RP? Или как я могу перенаправить пользователей на исходный URL? (учитывая, что все приложения находятся в одном домене).

Заранее благодарим за любую помощь.

ответ

3

Вы должны иметь возможность установить параметр wreply на основе приложения, которое инициирует поток аутентификации. Что-то вроде этого:

app.UseWsFederationAuthentication(
    new WsFederationAuthenticationOptions 
    { 
     Wtrealm = realm, 
     MetadataAddress = adfsMetadata, 
     Notifications = new WsFederationAuthenticationNotifications 
     { 
      RedirectToIdentityProvider = context => 
      { 
       context.ProtocolMessage.Wreply = <construct reply URL from context.Request>; 
       return Task.FromResult(0); 
      } 
     } 
    }); 
0

Проблема здесь в том, что даже делать этого ADFS сервер не должен соответствовать данному параметру Wreply. По умолчанию поведение ADFS всегда перенаправляется в Wtrealm после успешного входа в систему.

В нашем случае мы хотели пройти аутентификацию через ADFS с помощью двух тестовых серверов, 1 производственного сервера и включить логин для разработчиков (localhost). Из-за проблемы с перенаправлением каждый из серверов нуждается в собственном доверительном доверие.

Идеальное решение здесь заключается в том, что доверие RP создается отдельно для каждого сервера, на котором запущено приложение, а также для https://localhost:44300 (порт SSL по умолчанию для Visual Studio), чтобы разработчики также могли аутентифицироваться. Для разрешения https://localhost:44300, вероятно, некоторые сторонники безопасности предпочтительным вариантом будет настройка ADFS, например, на Azure VM.

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