public static IdentityServerServiceFactory Configure(this IdentityServerServiceFactory factory, string connectionString)
        {
            var efConfig = new EntityFrameworkServiceOptions
            {
                ConnectionString = connectionString,
                //SynchronousReads = true
            };

            // these two calls just pre-populate the test DB from the in-memory config
            ConfigureClients(Clients.Get(), efConfig);
            ConfigureScopes(Scopes.Get(), efConfig);
            ConfigureUsers(Users.Get(), efConfig);

            var serviceOptions = new EntityFrameworkServiceOptions {
                ConnectionString = connectionString
            };

            factory.RegisterOperationalServices(serviceOptions);
            factory.RegisterConfigurationServices(serviceOptions);

            factory.Register(new Registration <Entities.Context>(resolver => new Entities.Context(connectionString)));
            factory.Register(new Registration <Entities.UserStore>());
            factory.Register(new Registration <Entities.UserManager>());

            var userService = new EulaAtLoginUserService();

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

            factory.ViewService = new Registration <IViewService, CustomViewService>();

            return(factory);
        }
        public IdentityServerOptions GetOptions()
        {
            var factory = new IdentityServerServiceFactory()
                          .UseInMemoryClients(Clients.Get())
                          .UseInMemoryScopes(Scopes.Get());

            var userService = new EulaAtLoginUserService();

            // note: for the sample this registration is a singletone (not what you want in production probably)
            factory.UserService = new Registration <IUserService>(resolver => userService);

            var options = new IdentityServerOptions
            {
                SiteName = "IdentityServer3 - CustomUserService",

                SigningCertificate = Certificate.Get(),
                Factory            = factory,

                AuthenticationOptions = new AuthenticationOptions
                {
                    LoginPageLinks = new LoginPageLink[] {
                        new LoginPageLink {
                            Text = "Register",
                            Href = "localregistration"
                        }
                    }
                },

                EventsOptions = new EventsOptions
                {
                    RaiseSuccessEvents     = true,
                    RaiseErrorEvents       = true,
                    RaiseFailureEvents     = true,
                    RaiseInformationEvents = true
                }
            };

            return(options);
        }
Exemple #3
0
        public void Configuration(IAppBuilder app)
        {
            app.Map("/oauth", coreApp =>
            {
                var factory               = new IdentityServerServiceFactory();
                factory.ClaimsProvider    = new Registration <IClaimsProvider, CustomClaimProvider>();
                var clientStorageProvider = new ClientStorage();
                factory.ClientStore       = new Registration <IClientStore>(resolver => clientStorageProvider);
                var scopeStorageProvider  = new ScopeProvider();
                factory.ScopeStore        = new Registration <IScopeStore>(resolver => scopeStorageProvider);

                //currently by defult supported for angular only
                factory.ViewService = new Registration <IViewService, CustomAngularViewService>();

                // different examples of custom user services
                //var userService = new RegisterFirstExternalRegistrationUserService();
                //var userService = new ExternalRegistrationUserService();
                var userService = new EulaAtLoginUserService();
                // var userService = new LocalRegistrationUserService();

                //for normal
                // factory.UserService = new Registration<IUserService, EulaAtLoginUserService>();
                factory.UserService = new Registration <IUserService>(resolver => userService);

                //for custom login service
                // factory.UserService = new Registration<IUserService, LocalRegistrationUserService>();

                factory.Register(new Registration <TestController>(typeof(TestController)));

                var options = new IdentityServerOptions
                {
                    EnableWelcomePage = false,
                    //Endpoints = new EndpointOptions()
                    //{
                    //    EnableUserInfoEndpoint = true,
                    //    EnableTokenEndpoint = true,
                    //    EnableAuthorizeEndpoint = true,
                    //    EnableClientPermissionsEndpoint = true,
                    //    EnableTokenRevocationEndpoint = true,
                    //    EnableAccessTokenValidationEndpoint = true

                    //},
                    SiteName           = "Identity Server",
                    SigningCertificate = Certificate.Get(),
                    Factory            = factory,
                    ////this line for custom login
                    //AuthenticationOptions = new AuthenticationOptions
                    //{
                    //},

                    AuthenticationOptions = new AuthenticationOptions
                    {
                        RequireSignOutPrompt = false,

                        // IdentityProviders = ConfigureAdditionalIdentityProviders,
                        //LoginPageLinks = new LoginPageLink[] {
                        //    new LoginPageLink{
                        //        Text = "Register",
                        //        //Href = "~/localregistration"
                        //        Href = "localregistration"
                        //    }
                        //}
                    },

                    EventsOptions = new EventsOptions
                    {
                        RaiseSuccessEvents     = true,
                        RaiseErrorEvents       = true,
                        RaiseFailureEvents     = true,
                        RaiseInformationEvents = true
                    }
                };

                coreApp.UseIdentityServer(options);
            });

            //JwtSecurityTokenHandler.InboundClaimTypeMap.Clear();

            //app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
            //{
            //    Authority = "https://localhost:44300/core",

            //    RequiredScopes = new[] { "openId","write","email","profile" },

            //    // client credentials for the introspection endpoint
            //    ClientId = "write",
            //    ClientSecret = "secret"
            //});

            //app.UseWebApi(WebApiConfig.Register());
        }
        public void Configuration(IAppBuilder app)
        {
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Debug()
                         .WriteTo.File(@"c:\logs\OIDC.IdentityServer.Web.txt")
                         .CreateLogger();

            var ef = new EntityFrameworkServiceOptions
            {
                ConnectionString = "IdSvr3Config", //配置的连接字符串,EF会自动生成数据库
            };

            var factory = new IdentityServerServiceFactory();

            factory.RegisterConfigurationServices(ef);
            factory.RegisterOperationalServices(ef);
            factory.RegisterClientStore(ef);
            factory.RegisterScopeStore(ef);

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


            //自定义用户认证
            var userService = new EulaAtLoginUserService();

            factory.UserService = new Registration <IUserService>(resolver => userService);
            //自定义登录视图
            factory.ViewService = new Registration <IViewService, MvcViewService <LogonWorkflowController> >();
            //自定义登录视图,还需要这些注册,因为这些都是使用非STA处理的。
            factory.Register(new Registration <HttpContext>(resolver => HttpContext.Current));
            factory.Register(new Registration <HttpContextBase>(resolver => new HttpContextWrapper(resolver.Resolve <HttpContext>())));
            factory.Register(new Registration <HttpRequestBase>(resolver => resolver.Resolve <HttpContextBase>().Request));
            factory.Register(new Registration <HttpResponseBase>(resolver => resolver.Resolve <HttpContextBase>().Response));
            factory.Register(new Registration <HttpServerUtilityBase>(resolver => resolver.Resolve <HttpContextBase>().Server));
            factory.Register(new Registration <HttpSessionStateBase>(resolver => resolver.Resolve <HttpContextBase>().Session));

            var options = new IdentityServerOptions
            {
                SiteName              = "认证中心",
                SigningCertificate    = Certificate.Load(),
                Factory               = factory,
                RequireSsl            = false,
                AuthenticationOptions = new AuthenticationOptions
                {
                    IdentityProviders = ConfigureAdditionalIdentityProviders,
                    LoginPageLinks    = new LoginPageLink[] {
                        new LoginPageLink {
                            Text = "Register",
                            //Href = "~/localregistration"
                            Href = "localregistration"
                        }
                    }
                },

                EventsOptions = new EventsOptions
                {
                    RaiseSuccessEvents     = true,
                    RaiseErrorEvents       = true,
                    RaiseFailureEvents     = true,
                    RaiseInformationEvents = true
                }
            };

            //启动清除过期票据定时器
            var cleanToken = new TokenCleanup(ef, 20);

            cleanToken.Start();

            //自定义服务路径 http://localhost:44111/identity
            app.Map("/identity", idsrvApp =>
            {
                idsrvApp.UseIdentityServer(options);
            });

            Log.Logger.Information("程序启动成功");
        }