Пользовательский интерфейс администратора IdentityServer3

Я работаю над авторизацией с помощью IdentityServer3, и мне нужно настроить его конфигурацию для разных сред: dev, staging и так далее. Поэтому мне нужны настраиваемые URL-адреса перенаправления, сертификат и т. д., но я не могу найти средства для этого. Насколько я понимаю, в IS3 нет пользовательского интерфейса администратора, и для него нет плана. Нужно ли мне создавать собственную систему конфигурации?


person Aleksandr    schedule 16.09.2015    source источник


Ответы (2)


Адекватного решения не нашел. Закончилось созданием пользовательского config.json и чтением настроек оттуда.

Я оставляю код здесь. На всякий случай...

public class AuthConfiguration
{
    private static readonly Lazy<AuthConfiguration> _instance = new Lazy<AuthConfiguration>(LoadConfig);

    public static AuthConfiguration Instance
    {
        get { return _instance.Value; }
    }

    private AuthConfiguration()
    {
    }

    private static AuthConfiguration LoadConfig()
    {
        string jsonString;
        using (var r = new StreamReader(HttpRuntime.BinDirectory + "auth.config.json"))
        {
            jsonString = r.ReadToEnd();
        }

        return JsonConvert.DeserializeObject<AuthConfiguration>(jsonString);
    }

    public string AuthServerUrl { get; set; }
    public AuthCertificate Certificate { get; set; }
    public string[] CorsAllowedOrigins { get; set; }
    public Dictionary<string, AuthClient> Clients { get; set; }

    #region Helper classes

    public class AuthCertificate
    {
        public string File { get; set; }
        public string Password { get; set; }
    }

    public class AuthClient
    {
        public List<string> RedirectUris { get; set; }
        public List<string> PostLogoutRedirectUris { get; set; }
        public string[] Secrets { get; set; }
    }

    #endregion Helper classes
}
person Aleksandr    schedule 16.09.2015

Я пытался сделать это сам, и пришел к такому выводу. На самом деле вы можете редактировать только «основной» интерфейс, чтобы сделать это, используя свойство «ViewService» в вашем конвейере, что-то вроде этого:

 var factory = new IdentityServerServiceFactory();
            factory.ViewService = new CustomView();
            app.Map("/identity", id => {
                id.UseIdentityServer(new IdentityServerOptions {
                    SiteName = "Demo Identity Server",
                    IssuerUri = (string)ConfigurationManager.AppSettings["options.issuerUri"],

                    Factory = factory,

                    SigningCertificate = LoadCertificate()
                });

            });

CustomView реализует IViewService, здесь вам нужно реализовать свои собственные методы для редактирования вашего представления.

(Configure — это расширенный метод, в котором я реализую настройку всего конвейера, выполняя принципы SOLID и разделяя обязанности)

   public void Configuration(IAppBuilder app) {
            string connectionString = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString;


            var factory = new IdentityServerServiceFactory();
            factory.ViewService = new CustomView();
            app.Map("/identity", id => {
                id.UseIdentityServer(new IdentityServerOptions {
                    SiteName = "Demo Identity Server",
                    IssuerUri = (string)ConfigurationManager.AppSettings["options.issuerUri"],

                    Factory = factory,

                    SigningCertificate = LoadCertificate()
                });

            });

            app.Map("/admin", adminApp => {
                adminApp.UseIdentityManager(new IdentityManagerOptions() {
                    Factory = new IdentityManagerServiceFactory().Configure(connectionString)
                });
            });


        }

        X509Certificate2 LoadCertificate() {

            //Test certificate sourced from https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Certificates
            return new X509Certificate2(
                string.Format(@"{0}\bin\{1}", AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings["signing-certificate.name"]),
                (string)ConfigurationManager.AppSettings["signing-certificate.password"]);
        }
    }

Настройте код расширенного метода:

  public static class IdentityServerServiceFactoryExtensions {

        public static IdentityServerServiceFactory Configure(this IdentityServerServiceFactory factory, string connectionString) {

            var serviceOptions = new EntityFrameworkServiceOptions { ConnectionString = connectionString };
            factory.RegisterOperationalServices(serviceOptions);
            factory.RegisterConfigurationServices(serviceOptions);
            //factory.RegisterClientStore(serviceOptions);

            factory.Register(new Registration<Context>(resolver => new Context(connectionString)));
            factory.Register(new Registration<UserStore>());
            factory.Register(new Registration<UserManager>());
            factory.UserService = new Registration<IUserService, IdentityUserService>();

            return factory;

        }
    }

Но когда я попытался сделать то же самое для конечной точки «/admin», я не нашел никакой помощи или способа настроить это. Я спрашивал об этом в проблемах проекта github, но пока не получил никаких отзывов.

Надеюсь, это поможет

person AbelMorgan    schedule 02.12.2015