我试图自己做,我得到了这个结论。实际上你只能编辑“核心”界面,这样做的方法是在管道中使用属性“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,您必须在此处实现自定义方法以编辑视图。
(配置是一种扩展方法,我实现整个管道定制,执行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项目中询问了这个问题,但我还没有得到任何反馈。
希望这有帮助
没有找到任何适当的解决方案。结束创建自定义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 }