GithubHelp home page GithubHelp logo

kawhii / sso Goto Github PK

View Code? Open in Web Editor NEW
931.0 88.0 428.0 445 KB

cas单点登录系统,其中包括cas认证服务,配置中心,监控平台,服务管理的高可用项目

Home Page: https://kawhii.github.io/sso

License: MIT License

Batchfile 11.20% Shell 2.74% Java 79.27% HTML 6.72% CSS 0.07%
sso tutorial spring-cloud cas java github spring-boot authorization oauth2 sso-login

sso's People

Contributors

cabbage89 avatar kawhii avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sso's Issues

github登录集成

  • 通过github进行登录
  • 若通过github进行登录,用户未绑定跳转到绑定页

单用户登录

所谓“单用户单账户登录”是指:在同一系统中,一个用户名不能在两个地方同时登录

1.3.1文档补充

新增博客教程,包括

  • shiro的配置方案
  • rest的配置方案
  • rest client的注意事项

初始化 jdk 报错

.\build.cmd init

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] sso-spring-dependencies ............................ SUCCESS [  0.402 s]
[INFO] sso-support ........................................ SUCCESS [  0.035 s]
[INFO] sso-support-custom-auth ............................ FAILURE [  1.914 s]
[INFO] sso-support-single-login ........................... SKIPPED
[INFO] sso-support-captcha ................................ SKIPPED
[INFO] sso ................................................ SKIPPED
[INFO] sso-server ......................................... SKIPPED
[INFO] sso-config ......................................... SKIPPED
[INFO] sso-management ..................................... SKIPPED
[INFO] sso-client-demo .................................... SKIPPED
[INFO] sso-cas-client-demo ................................ SKIPPED
[INFO] sso-client-shiro-demo .............................. SKIPPED
[INFO] sso-client-proxy-demo .............................. SKIPPED
[INFO] sso-support-validate ............................... SKIPPED
[INFO] sso-monitor ........................................ SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.245 s
[INFO] Finished at: 2017-12-18T17:57:15+08:00
[INFO] Final Memory: 41M/452M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project sso-support-custom-auth: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[ERROR]
[ERROR] -> [Help 1]

文档补充

  1. 嵌入式数据库问题,cas的默认数据库问题
  2. 嵌入数据库开发时需要注意的问题,默认是cas-hsql-database
  3. 提供mysql的版本说明

remember me功能

#记住我功能
cas.ticket.tgt.rememberMe.enabled = true
cas.ticket.tgt.rememberMe.timeToKillInSeconds = 28800
记住我功能开启,但是不生效问题

关于jwt执行完成后登陆shiro的问题

我在配置中增加了jwt的client,SecurityFilter执行完成client后,是在哪里进行登陆shiro的,我计划改造shiro为stateless,无法下手.希望能提供具体的位置,万分感谢

密码管理功能教程

  • 根据文档跑通正常流程
  • 输出教程到CSDN
  1. 打开重置密码
  2. 发送邮件
  3. 打开链接
  4. 回答问题
  5. 修改密码

验证码支持

支撑验证码

  • 访问输出验证码
  • 支撑验证码库更换
  • 支持接口获取校验码
  • 支持接口校验码自动删除

[ 登出 ]是否可以修改发送登出时使用的方法

关于问题报告

当您有需求或者遇到棘手的问题甚至项目无法启动时,请打开博客看是否能找到解决方案

提出问题

需求

提出需求时请囊括以下要素:

  • 业务场景
    在使用的过程中,我发现,在配置业务系统的登出url时,默认时通过Post请求发送的,我在想,是否可以修改这个发送的请求方法,比如修改成Get请求
  • 目前使用sso情况
    正在学习
  • 是否对外开放
  • Cas版本
    5.1.6
  • 集成客户端SDK(pac4j/cas-client)
    pac4j/cas-client

HSQLDB数据库认证

  1. HSQLDB文件数据库存储在sso-server进行加载用户数据
  2. 密码策略为MD5+盐进行测试
  3. 新增单元测试对数据库进行测试

HDSQL集成验证,数据初始化用sql文件,并且存在内存

系统间安全

测试环境需要增加以下安全

  • cas服务仪表增加用户鉴权
  • admin-server接入用户鉴权
  • admin-server登录授权

多属性返回

  • 用于登录成功返回自定义熟悉
  1. 权限
  2. 扩展数据

service管理

  • json方式初始化,并且支持所有localhost
  • service的持久化

看到blog里面有配置jwt的,没有明白jwt client为什么要注入到cas里面,按照理解jwt无非就是将cas的结果(casRestFormClient)生成token 返回到用户端

关于问题报告

当您有需求或者遇到棘手的问题甚至项目无法启动时,请打开博客看是否能找到解决方案

提出问题

需求

提出需求时请囊括以下要素:

  • 业务场景
  • 目前使用sso情况
  • 是否对外开放
  • Cas版本
  • 集成客户端SDK(pac4j/cas-client)

Bug

若是bug问题,请包括以下要素:

  • bug出现场景
  • 配置文件源码
  • Cas版本
  • bug紧急情况

Docker构建

项目支持Docker构建,上传到docker hub

  • 各服务可以配置指定端口进行访问
  • package之后采用Dockerfile进行build
  • 自定义端口
  • 发布到docker hub

自定义主题

  • 图标改变
  • 背景颜色改变
  • 部分字体改变
  • 输出博文

主题名称为:light

第三方登录绑定

当时第三方登录是,查找用户未登录是,先调整到绑定页,绑定完成才调整到业务系统

初始化ValidateWebflowConfiguation时出现空指针异常

java.lang.NullPointerException: null
        at org.apereo.cas.web.flow.AbstractCasWebflowConfigurer.initialize(AbstractCasWebflowConfigurer.java:116) ~[cas-server-core-webflow-5.1.5.jar!/:5.1.5]
        at com.carl.sso.support.captcha.config.ValidateWebflowConfiguation.validateWebflowConfigurer(ValidateWebflowConfiguation.java:60) ~[sso-support-captcha-1.6.0-RC4-SNAPSHOT.jar!/:1.6.0-RC4-SNAPSHOT]
        at com.carl.sso.support.captcha.config.ValidateWebflowConfiguation$$EnhancerBySpringCGLIB$$bf33f3ec.CGLIB$validateWebflowConfigurer$2(<generated>) ~[sso-support-captcha-1.6.0-RC4-SNAPSHOT.jar!/:1.6.0-RC4-SNAPSHOT]
        at com.carl.sso.support.captcha.config.ValidateWebflowConfiguation$$EnhancerBySpringCGLIB$$bf33f3ec$$FastClassBySpringCGLIB$$ae0bdbcb.invoke(<generated>) ~[sso-support-captcha-1.6.0-RC4-SNAPSHOT.jar!/:1.6.0-RC4-SNAPSHOT]

        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at com.carl.sso.support.captcha.config.ValidateWebflowConfiguation$$EnhancerBySpringCGLIB$$bf33f3ec.validateWebflowConfigurer(<generated>) ~[sso-support-captcha-1.6.0-RC4-SNAPSHOT.jar!/:1.6.0-RC4-SNAPSHOT]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_144]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:345) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:359) ~[spring-cloud-context-1.2.0.RELEASE.jar!/:1.2.0.RELEASE]
        at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:176) ~[spring-cloud-context-1.2.0.RELEASE.jar!/:1.2.0.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:340) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.cloud.context.scope.refresh.RefreshScope.start(RefreshScope.java:121) ~[spring-cloud-context-1.2.0.RELEASE.jar!/:1.2.0.RELEASE]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_144]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:256) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:177) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:140) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144) ~[spring-boot-1.5.3.RELEASE.jar!/:1.5.3.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-4.3.11.RELEASE.jar!/:4.3.11.RELEASE]
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.3.RELEASE.jar!/:1.5.3.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) ~[spring-boot-1.5.3.RELEASE.jar!/:1.5.3.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) ~[spring-boot-1.5.3.RELEASE.jar!/:1.5.3.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) ~[spring-boot-1.5.3.RELEASE.jar!/:1.5.3.RELEASE]
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134) ~[spring-boot-1.5.3.RELEASE.jar!/:1.5.3.RELEASE]
        at org.apereo.cas.web.CasWebApplication.main(CasWebApplication.java:77) ~[cas-server-webapp-init-5.1.5.jar!/:5.1.5]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_144]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[cas.war:5.1.5]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[cas.war:5.1.5]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) ~[cas.war:5.1.5]
        at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:59) ~[cas.war:5.1.5]
2017-11-06 13:28:05,430 ERROR [org.apereo.cas.web.flow.AbstractCasWebflowConfigurer] - <null>
java.lang.NullPointerException: null

搭建监控模块

采用 spring-admin进行搭建监控模块,并且让各服务连接监控系统

还是AuthenticationHandler的顺序问题

我这里只是改了下数据库为mysql,测试时发现先到QueryDatabaseAuthenticationHandler去验证,通过了就没有到UsernamePasswordSystemAuthenticationHandler,这是正常的吗?

验证码

将验证码添加到loginform,会显示图片,但是不会验证,空或者错误,正确。均不会拦截。

关于密码修改发送邮件的问题

按照博客上的配置配置好后,无法接收到邮件。
把发送邮箱改成我自己的邮箱后也不行。
请您看到后,帮我解决下可以吗?

发送校验码

验证模块接口说明文档

  • 信息发送者ISender(主导发送信息对象,例如发送校验码到手机,发送到邮箱)
  • 信息存储IStore(负责存储发送者发出的信息)
  • 信息生成器InformativeGenerator(负责生成发送者需要发送的信息)
  • 信息校验器IValidator(负责对数据进行校验)

流程

  1. 信息生成器负责生成数据提供给信息发送者
  2. 发送成功保存
  3. 校验成功删除

配置

#验证码发送邮箱
sso.validate.mail.enable=true
sso.validate.mail.from=${spring.mail.username}
sso.validate.mail.content=统一门户注册验证码为:%s
sso.validate.mail.subject=统一门户注册

程序发送

@Autowired
private DefaultValidateService validateService;

//验证
@PostMapping
public String registry(Model model, HttpServletRequest request, @Valid RegistryInfoVo registryInfoVo) {
        ValidateResult result = validateService.validate(
                new MailValidateCredential(request.getSession().getId(), registryInfoVo.getEmail(),
                        "registry", registryInfoVo.getValidateCode()));
    if (result == ValidateResult.FAIL) {
        model.addAttribute("validateError", "验证码错误");
    } else if (result == ValidateResult.EXPIRED) {
        model.addAttribute("validateError", "验证码已过期");
    }
    return "registryView";
}


//发送
validateService.send(new MailCredential(request.getSession().getId(), mail, "registry"));
           

sso-management 模块启动后访问一直返回404页面

问题

按照博客文章 http://blog.csdn.net/u010475041/article/details/78028658 所描述,直接利用工程里面的代码,编译后启动,弹出浏览器后访问报错,一直没法正常使用sso-management
启动顺序
sso-config
sso-server
sso-management

启动完最后一个模块,弹出浏览器,直接定向到地址 http://passport.sso.com:8443/cas/login?service=http%3A%2F%2Flocalhost%3A8081%2Fmanage.html
返回的是404页面

直接访问 http://localhost:8081/cas-management 也是返回此404页面

  • 环境参数
    CAS Version: 5.1.6
    CAS Commit Id: d10c36f0e326e911082bebe74d288c1af9b946ae
    CAS Build Date/Time: 2017-11-19T14:01:38Z
    Spring Boot Version: 1.5.3.RELEASE

System Date/Time: 2018-01-05T20:26:00.232
System Temp Directory: /data/apps/opt/tomcat88/temp

Java Home: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre
Java Vendor: Oracle Corporation
Java Version: 1.8.0_77
JCE Installed: no

OS Architecture: x86_64
OS Name: Mac OS X
OS Version: 10.12.6

求助博主

AuthenticationHandler验证顺序问题

请教一个问题,测试了下自定义认证UsernamePasswordSystemAuthenticationHandler会在QueryDatabaseAuthenticationHandler 之后,这样的话如果QueryDatabaseAuthenticationHandler 验证通过,就不会到UsernamePasswordSystemAuthenticationHandler 这个有办法处理吗?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.