REST认证方式使用在这样的场景下,用户数据是存储在远端,不允许CAS直接访问账号数据,不希望CAS知道账号数据的表结构等情,因此会通过发起一个POST请求来进行认证.
CAS配置
第一步把上节内容中的数据库配置全部注释掉,或者我们复制一份新的cas.properties文件.
cas.server.name=https://localhost:8443
cas.server.prefix=${cas.server.name}/cas
logging.config: file:/etc/cas/config/log4j2.xml
cas.authn.accept.users=
cas.authn.rest.uri=http://localhost:8080/login
cas.authn.rest.passwordEncoder.type=DEFAULT
cas.authn.rest.passwordEncoder.characterEncoding=UTF-8
cas.authn.rest.passwordEncoder.encodingAlgorithm=MD5
build.gradle配置
compile "org.apereo.cas:cas-server-support-rest-authentication:${project.'cas.version'}"
当用户点击登录后,cas会发送post请求到
http://localhost:8080/login
并且把用户信息以”用户名:密码”进行Base64编码放在authorization请求头中.
若输入用户名密码为:LegitUser/Password1
那么请求头包括: authorization=Basic Base64(LegitUser+MD5(Password1))
那么发送后客户端必须响应一下数据,cas明确规定如下:
cas 服务端会通过post请求,并且把用户信息以”用户名:密码”进行Base64编码放在authorization请求头中返回200状态码并且格式为{“@class”:”org.apereo.cas.authentication.principal.SimplePrincipal”,”id”:”LegitUser”,”attributes”:{}} 是成功的;
返回错误码
返回状态码:403用户不可用;404账号不存在;423账户被锁定;412过期;428密码需要更改;其他登录失败.
编译执行
提示找不到login服务
登录认证失败
可见已经提示post的服务并不存在.下一节我们来创建一个实例服务来配合做验证.