Выход IdentityServer3 с перенаправлением в ADFS

У меня IdentityServer3 настроен на использование как служб федерации Active Directory, так и поставщиков внутренней проверки подлинности. По примерам все работает отлично.

Однако, когда вы входите в /identity и пытаетесь выйти из системы с помощью Request.GetOwinContext().Authentication.SignOut() в контроллере выхода из системы, сайт перенаправляется в /adfs/logout. При входе в / adfs и выходе из системы он также перенаправляется в /adfs/logout.

Что является причиной этого?

Также - основной клиент зарегистрирован по внешнему доступному URL (например, www.prettyurl.com). IdentityServer размещается отдельно по внутреннему URL-адресу (например, www.lesspretty-internal-stuff.com). Естественно, я не хочу, чтобы посетители видели этот внутренний URL, но в настоящее время при перенаправлении на шаблон входа в систему пользователи видят www.lesspretty-internal-stuff.com/identity/login. Как лучше всего убедиться, что пользователи видят www.prettyurl.com/identity/login?

Ниже приведена конфигурация для регистрации клиента ADFS:

{
"Enabled": true,
"ClientId": "SiteA.adfs",
"ClientSecrets": [
  {
    "Description": null,
    "Value": "NvD0tgVqxNCkt9u3yUWXwdRMnWyE3DcBId7tveUElWA=",
    "Expiration": null,
    "Type": "SharedSecret"
  }
],
"ClientName": "SiteA",
"ClientUri": null,
"LogoUri": null,
"RequireConsent": false,
"AllowRememberConsent": false,
"Flow": 2,
"AllowClientCredentialsOnly": false,
"RedirectUris": [
  "https://myadfs.com/"
],
"PostLogoutRedirectUris": [
  "https://myadfs.com/"
],
"LogoutUri": null,
"LogoutSessionRequired": true,
"RequireSignOutPrompt": false,
"AllowAccessToAllScopes": true,
"AllowedScopes": [
  "openid",
  "profile",
  "email",
  "roles"
],
"IdentityTokenLifetime": 360,
"AccessTokenLifetime": 3600,
"AuthorizationCodeLifetime": 300,
"AbsoluteRefreshTokenLifetime": 2592000,
"SlidingRefreshTokenLifetime": 1296000,
"RefreshTokenUsage": 1,
"UpdateAccessTokenClaimsOnRefresh": false,
"RefreshTokenExpiration": 1,
"AccessTokenType": 0,
"EnableLocalLogin": false,
"IdentityProviderRestrictions": [
  "adfs"
],
"IncludeJwtId": false,
"Claims": [

],
"AlwaysSendClientClaims": true,
"PrefixClientClaims": true,
"AllowAccessToAllCustomGrantTypes": false,
"AllowedCustomGrantTypes": [

],
"AllowedCorsOrigins": [

],
"AllowAccessTokensViaBrowser": true}

Ниже приведена конфигурация для регистрации клиента IDENTITY:

{
"Enabled": true,
"ClientId": "SiteB.identity",
"ClientSecrets": [
  {
    "Description": null,
    "Value": "NvD0tgVqxNCkt9u3yUWXwdRMnWyE3DcBId7tveUElWA=",
    "Expiration": null,
    "Type": "SharedSecret"
  }
],
"ClientName": "SiteB",
"ClientUri": null,
"LogoUri": null,
"RequireConsent": false,
"AllowRememberConsent": false,
"Flow": 2,
"AllowClientCredentialsOnly": false,
"RedirectUris": [
  "https://myid.com/"
],
"PostLogoutRedirectUris": [
  "https://myid.com/"
],
"LogoutUri": null,
"LogoutSessionRequired": true,
"RequireSignOutPrompt": false,
"AllowAccessToAllScopes": true,
"AllowedScopes": [
  "openid",
  "profile",
  "email",
  "roles"
],
"IdentityTokenLifetime": 360,
"AccessTokenLifetime": 3600,
"AuthorizationCodeLifetime": 300,
"AbsoluteRefreshTokenLifetime": 2592000,
"SlidingRefreshTokenLifetime": 1296000,
"RefreshTokenUsage": 1,
"UpdateAccessTokenClaimsOnRefresh": false,
"RefreshTokenExpiration": 1,
"AccessTokenType": 0,
"EnableLocalLogin": true,
"IdentityProviderRestrictions": [
  "Google",
  "idsrv"
],
"IncludeJwtId": false,
"Claims": [

],
"AlwaysSendClientClaims": true,
"PrefixClientClaims": true,
"AllowAccessToAllCustomGrantTypes": false,
"AllowedCustomGrantTypes": [

],
"AllowedCorsOrigins": [

],
"AllowAccessTokensViaBrowser": true}

Запуск в IdentityServer:

public void ConfigureAuth(IAppBuilder app)
    {
        app.Map("/identity", idsrvApp =>
        {
            Log.Information("Bouncer {Now}: Identity configuration", DateTime.Now);

            var factory =
                new IdentityServerServiceFactory()
                        .UseInMemoryClients(Clients.Get())
                        .UseInMemoryScopes(Scopes.Get());

            var userService = new UserService();
            factory.UserService = new Registration<IUserService>(resolver => userService);

            var viewOptions = new DefaultViewServiceOptions()
            {
                CacheViews = false,
                CustomViewDirectory = basePath + "templates\\myAccount"  // This must be the full filesystem path to the directory
            };

            factory.ConfigureDefaultViewService(viewOptions);

            idsrvApp.UseIdentityServer(new IdentityServerOptions
            {
                SiteName = "mysite",
                SigningCertificate = LoadCertificate(),
                Factory = factory,
                RequireSsl = true,
                CspOptions = new IdentityServer3.Core.Configuration.CspOptions
                {
                    Enabled = EnableCSP,
                    ScriptSrc = cspScript,
                    StyleSrc = cspStyle,
                    ImgSrc = cspImg,
                    FontSrc = cspFont,
                    ConnectSrc = cspConnect
                },

                AuthenticationOptions = new IdentityServer3.Core.Configuration.AuthenticationOptions
                {
                    EnablePostSignOutAutoRedirect = true,
                    IdentityProviders = ConfigureIdentityProviders,
                    LoginPageLinks = new List<LoginPageLink>()
                    {
                        new LoginPageLink()
                        {
                            Href = "resetpassword",
                            Text = "Forgot your password?",
                            Type = "resetPassword"
                        }
                    }
                }

            });
        });

            app.Map("/adfs", coreApp =>
            {
                var factory =
                 new IdentityServerServiceFactory()
                            .UseInMemoryClients(Clients.Get())
                            .UseInMemoryScopes(Scopes.Get());

                var viewOptions = new DefaultViewServiceOptions()
                {
                    CacheViews = false,
                    CustomViewDirectory = basePath + "templates\\myadaccount"  // This must be the full filesystem path to the directory
                };

                factory.ConfigureDefaultViewService(viewOptions);

                factory.UserService = new Registration<IUserService>(typeof(ExternalRegistrationUserService));

                var options = new IdentityServerOptions
                {
                    SiteName = "myADSite,
                    SigningCertificate = LoadCertificate(),
                    Factory = factory,
                    RequireSsl = true,
                    CspOptions = new IdentityServer3.Core.Configuration.CspOptions
                    {
                        Enabled = EnableCSP,
                        ScriptSrc = cspScript,
                        StyleSrc = cspStyle,
                        ImgSrc = cspImg,
                        FontSrc = cspFont,
                        ConnectSrc = cspConnect
                    },

                    AuthenticationOptions = new IdentityServer3.Core.Configuration.AuthenticationOptions
                    {
                        EnableLocalLogin = false,
                        IdentityProviders = ConfigureWSFedProvider

                    }
                };
                coreApp.UseIdentityServer(options);
            });
        }
    }  

0 ответов

Другие вопросы по тегам