Настройка нескольких экземпляров SAML2 в IdentityServer3 с помощью SustainSys - PullRequest
0 голосов
/ 19 октября 2018

В IdentityServer3 я настроил несколько экземпляров внешних поставщиков на основе SAML2, используя библиотеку SustainSys согласно документации .
Я получил ее на работу, но у меня вопрос о SPOptions.EntityID aka Audience Uri. (Это НЕ EntityID, который нам предоставляет внешний провайдер, но вместо этого это EntityID, который мне нужно предоставить внешнему провайдеру)

Должно ли это Audience Uri быть уникальным для каждого экземпляра?

Допустим, я настроил 2 экземпляра провайдеров SAML2 (Okta и Azure AD) в производстве, а затем на основе предоставленного образца кода для конкретной среды Audience Uri НЕ будет уникальным.

Ниже приведен мой код на основе примера кода. (для краткости я удалил несколько строк)

public class Startup
{        
    public void Configuration(IAppBuilder app)
    {
        app.Map("/identity", idsrvApp =>
        {
            var identityServerOptions = new IdentityServerOptions
            {                    
                AuthenticationOptions = new AuthenticationOptions()
                {         
                    EnableAutoCallbackForFederatedSignout = true,
                    EnableSignOutPrompt = false
                }
                .Configure(ConfigureExternalIdentityProviders)                    
            };
            idsrvApp.UseIdentityServer(identityServerOptions);
        });            
    }

    private void ConfigureExternalIdentityProviders(IAppBuilder app, string signInAsType)
    {           
        // Add okta
        AddSAML2Idp(
            app,                
            signInAsType,
            "https://id.mydomain.com/identity/Saml2", //audienceURI
            "okta", //idpname
            "okta", //caption
            "https://www.okta.com/exk4yxtgy7ZzSDp8e0h7", // externalEntityID
            "https://dev-490944.oktapreview.com/app/exk4yxtgy7ZzSDp8e0h7/sso/saml/metadata"); // metadataLocation

        // Add Azure AD
        AddSAML2Idp(app,                
            signInAsType,
            "https://id.mydomain.com/identity/Saml2", //audienceURI
            "azuread", //idpname
            "Azure ad", //caption
            "https://sts.windows.net/xxxxx-fb1d-40c4-xxxxx-xxxxxxxx/", //externalEntityID
            "https://login.microsoftonline.com/xxxx-fb1d-40c4-40c4-xxxxxxx/federationmetadata/2007-06/federationmetadata.xml?appid=xxxx-xxxx-xxxx-xxxx-xxxxxx"); //metadataLocation
    }      

    private void AddSAML2Idp(IAppBuilder app, string signInAsType,string audienceURI, string idpname, string caption, string externalEntityID, string metadataLocation)
    {
        var authenticationOptions = new Saml2AuthenticationOptions(false)
        {
            SPOptions = new SPOptions
            {
                EntityId = new EntityId(audienceURI),                     
                ModulePath = string.Format("/{0}", idpname)
            },
            SignInAsAuthenticationType = signInAsType,
            AuthenticationType = idpname,
            Caption = caption
        };

        UseIdSrv3LogoutOnFederatedLogout(app, authenticationOptions);

        authenticationOptions.SPOptions.ServiceCertificates.Add(LoadCertificateFromWindwosStore());

        var identityProvider = new IdentityProvider(new EntityId(externalEntityID), authenticationOptions.SPOptions)
        {                
            MetadataLocation = metadataLocation,
            LoadMetadata = true 
        };

        authenticationOptions.IdentityProviders.Add(identityProvider);

        app.UseSaml2Authentication(authenticationOptions);
    }

То есть для okata

Audience Uri: https://id.mydomain.com/identity/Saml2
ACS Uri: https://id.mydomain.com/identity/okta/acs

и для Azure AD

Audience Uri: https://id.mydomain.com/identity/Saml2
ACS Uri: https://id.mydomain.com/identity/azuread/acs

Обратите внимание, что URI аудитории одинаковы для обоих случаев.

Должен ли он быть уникальным для каждого экземпляра, например:

https://id.mydomain.com/identity/okta   
https://id.mydomain.com/identity/azuread   

1 Ответ

0 голосов
/ 19 октября 2018

Логически два экземпляра являются двумя разными поставщиками услуг SAML2 и должны иметь разные идентификаторы сущностей.Но, поскольку вы не выставляете их обоих на один и тот же восходящий Idp, это не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...