1

私はWindows Authentication Serviceで動作するIdentityServer3を持っています。今、私のIdentityServer3でSAML2プロトコルを扱いたいと思っています。私はKentorが私のためにそれを行うことができることを見ました。IdentityServer3でKentor + Windows認証を使用する

問題は、すべてのサンプルでKentorがOpenID Connectを使用していて、しばらく検索しましたが、KentorとWindowsAuthをどのように組み合わせるかに関するドキュメントが見つかりませんでした。成功しなかった多くの試みの後で、私はここに来て、それが本当に可能かどうかと尋ねます。ここで

はStartup.csで私の(非稼働)の設定です:

public void Configuration(IAppBuilder appBuilder) 
{ 
    appBuilder.Map("/windows", ConfigureWindowsTokenProvider); 
    appBuilder.UseIdentityServer(GetIdentityServerOptions()); 
} 

private void ConfigureWsFederation(IAppBuilder pluginApp, IdentityServerOptions options) 
{ 
    var factory = new WsFederationServiceFactory(options.Factory); 

    factory.Register(new Registration<IEnumerable<RelyingParty>>(RelyingParties.Get())); 
    factory.RelyingPartyService = new Registration<IRelyingPartyService>(typeof(InMemoryRelyingPartyService)); 
    factory.CustomClaimsService = new Registration<ICustomWsFederationClaimsService>(typeof(ClaimsService)); 
    factory.CustomRequestValidator = new Registration<ICustomWsFederationRequestValidator>(typeof(RequestValidator)); 

    var wsFedOptions = new WsFederationPluginOptions 
    { 
     IdentityServerOptions = options, 
     Factory = factory, 
    }; 

    pluginApp.UseWsFederationPlugin(wsFedOptions); 
} 

private IdentityServerOptions GetIdentityServerOptions() 
{ 
    DefaultViewServiceOptions viewServiceOptions = new DefaultViewServiceOptions(); 
    viewServiceOptions.CustomViewDirectory = HttpContext.Current.Server.MapPath("~/Templates"); 
    viewServiceOptions.Stylesheets.Add("/Content/Custom.css"); 

    IdentityServerServiceFactory factory = new IdentityServerServiceFactory() 
     .UseInMemoryClients(new List<Client>()) 
     .UseInMemoryScopes(new List<Scope>()); 

    factory.ConfigureDefaultViewService(viewServiceOptions); 
    factory.UserService = new Registration<IUserService>(resolver => new UserService()); 

    return new IdentityServerOptions 
    { 
     SigningCertificate = Certificate.Load(), 
     Factory = factory, 
     PluginConfiguration = ConfigureWsFederation, 
     EventsOptions = new EventsOptions 
     { 
      RaiseSuccessEvents = true, 
      RaiseFailureEvents = true, 
     }, 
     AuthenticationOptions = new IdentityServer3.Core.Configuration.AuthenticationOptions 
     { 
      IdentityProviders = ConfigureIdentityProviders, 
      EnableLocalLogin = false, 
     }, 
     RequireSsl = true, 
    }; 
} 

private void ConfigureIdentityProviders(IAppBuilder app, string signInAsType) 
{ 
    ConfigureWSFederationProvider(app, signInAsType); 
    ConfigureKentorProvider(app, signInAsType); 
} 

private void ConfigureKentorProvider(IAppBuilder app, string signInAsType) 
{ 
    SPOptions spOptions = new SPOptions 
    { 
     EntityId = new EntityId("Dropbox"), 
    }; 
    KentorAuthServicesAuthenticationOptions kentorOptions = new KentorAuthServicesAuthenticationOptions(false) 
    { 
     Caption = "Windows", 
     SignInAsAuthenticationType = signInAsType, 
     SPOptions = spOptions, 
    }; 
    IdentityProvider idp = new IdentityProvider(new EntityId("http://stubidp.kentor.se/Metadata"), spOptions) 
    { 
     Binding = Saml2BindingType.HttpRedirect, 
     AllowUnsolicitedAuthnResponse = true, 
     LoadMetadata = true, 
    }; 
    kentorOptions.IdentityProviders.Add(idp); 
    app.UseKentorAuthServicesAuthentication(kentorOptions); 
} 

private void ConfigureWSFederationProvider(IAppBuilder app, string signInAsType) 
{ 
    app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions() 
    { 
     AuthenticationType = "windows", 
     Caption = "Windows", 
     SignInAsAuthenticationType = signInAsType, 

     MetadataAddress = serverHost + "windows", 
     Wtrealm = "urn:idsrv3", 
    }); 
} 

private void ConfigureWindowsTokenProvider(IAppBuilder app) 
{ 
    app.UseWindowsAuthenticationService(new WindowsAuthenticationOptions 
    { 
     IdpReplyUrl = serverHost, 
     SigningCertificate = Certificate.Load(), 
     EnableOAuth2Endpoint = false, 
    }); 
} 

この構成では、構築し、私は(SAML2を使用して)DropboxのSSOを使用するとき、私は例外No Idp with entity id "Dropbox" foundを取得します。

+0

'Caption =" Windows "、はあなたのKentorコードで間違っていますが、主な問題は他の場所にあります。 – explunit

+0

はい、Kentor.AuthServicesとWindowsの両方を、IdentityServer3内の別個の外部IDプロバイダとして使用することは可能です。私は現在のコードを小さなサンプルに集める時間はありませんが、https://github.com/KentorIT/authservices/tree/master/SampleIdentityServer3で始まり、IdentityServer3のWindows認証サンプルに追加しました – explunit

+0

ありがとう私はそれらが一緒に働くようにする必要があります、分離しないでください。それが私のポストのポイントです。 –

答えて

0

あなたのアプリケーション(SpOptionsのもの)のID(SAML2用語のEntityId)として「Dropbox」を設定しました。これは、アプリケーションを識別するURIでなければなりません。規約では、URLをメタデータ(〜/ AuthServices)に使用します。

Dropbox idpの設定でIdentityProviderを追加する必要があります。また、SAML2標準でエンティティIDを絶対URIにする必要があるため、DropboxのEntityIdは機能しません。

関連する問題