Background
Đan điểm đăng lục SSO
(Single Sign ON), chỉ tại đa cá ứng dụng hệ thống trung, chỉ nhu đăng lục nhất thứ, tức khả tại đa cá ứng dụng hệ thống chi gian cộng hưởng đăng lục.Thống nhất thân phân nhận chứng CAS
( Central Authentication Service ) thị SSO đích khai nguyên thật hiện, lợi dụng CAS thật hiện SSO khả dĩ ngận đại trình độ đích hàng đê khai phát hòa duy hộ đích thành bổn.- CAS do CAS Server hòa CAS Client lưỡng bộ phân tổ thành.
- CAS tam cá trọng yếu thuật ngữ: TGT ( Ticket Granting Ticket ), TGC ( Ticket Granting Cookie ) hòa ST ( Service Ticket ).
1, sở dụng nhuyễn kiện bản bổn
Nhuyễn kiện danh xưng | Bản bổn |
---|---|
jdk | 1.8.0_202 |
maven | 3.6.3 |
cas | 5.3.16 |
- maven hạ tái địa chỉ:https://maven.apache.org/download.cgi
- cas-overlay github địa chỉ:https://github.com/apereo/cas-overlay-template/tree/5.3
- cas-overlay gitee địa chỉ:https://gitee.com/waisaa/cas-overlay-template
CAS hạng mục thác quản tại Github thượng, khắc long hoặc giả hạ tái nguyên mã, tiến hành biên dịch dĩ hậu tức khả an trang. Đãn thị đối vu nhất bàn dụng hộ lai thuyết, quan phương kiến nghị đích an trang phương thức thị sử dụng WAR Overlay phương pháp lai an trang biên dịch hảo đích war bao. WAR Overlay thị nhất chủng đối kháng trọng phục tính đích đại mã hòa tư nguyên đích sách lược. Tha hội hạ tái nhất cá do hạng mục bổn thân đề cung đích dự cấu kiến đích phổ thông CAS Web ứng dụng trình tự phục vụ khí, nhi bất thị hạ tái CAS đại mã khố tịnh tòng nguyên đại mã khai thủy cấu kiến. WAR Overlay tại cấu kiến thời, cấu kiến an trang công cụ thủ tiên hội thường thí hạ tái quan phương đề cung đích nhị tiến chế an trang bao. Nhiên hậu, cai công cụ tương tra trảo tại đồng nhất hạng mục mục lục trung khả dụng đích phối trí văn kiện hòa thiết trí, tịnh tương tha môn hợp tịnh đáo hạ tái đích công kiện trung, dĩ sinh thành nhất cá hoàn chỉnh đích Web tồn đương (
cas.war
).
2, cas-server an trang
- Sinh thành đích
cas.war
Bao tại target mục lục hạ- Phóng vấn địa chỉ:
https://localhost:8443/cas
(localhost hoán thành cas sở tại đích phục vụ khí IP)- Mặc nhận dụng hộ danh mật mã:
casuser
=Mellon
gitclone-b5.3https://github.com/apereo/cas-overlay-template.git
mvn clean compile package
java-jartarget/cas.war
Giá dạng, trung ương thân phân nhận chứng phục vụ tựu an trang hảo liễu!
3, springboot tập thành cas-client
- maven y lại
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.3.0-GA</version>
</dependency>
- yml phối trí
server:
port:8888
servlet:
context-path:/sso-client
cas:
# hậu đoan phục vụ địa chỉ
client-host-url:http://127.0.0.1:8888
#cas nhận chứng trung tâm địa chỉ
server-url-prefix:https://monkey:8443/cas
#cas nhận chứng trung tâm đăng lục địa chỉ
server-login-url:https://monkey:8443/cas/login
validation-type:cas
- Khải động loại gia thượng
@EnableCasClient
Khải dụng CAS - Thối xuất kỳ lệ
packagecas.client.sso.controller;
importlombok.extern.slf4j.Slf4j;
importorg.jasig.cas.client.authentication.AttributePrincipal;
importorg.jasig.cas.client.util.AbstractCasFilter;
importorg.jasig.cas.client.validation.Assertion;
importorg.springframework.beans.factory.annotation.Value;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.ResponseBody;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpSession;
/**
* @ClassName: TestController
* @Description: TestController
* @Author W
* @Date 2020/12/23 17:32
* @Version 1.0
*/
@Slf4j
@Controller
publicclassTestController{
@Value(value="${cas.server-url-prefix}")
privateStringserverUrlPrefix="";
@Value(value="${cas.client-host-url}")
privateStringclientHostUrl="";
// /sso-client/hello
@GetMapping("/hello")
@ResponseBody
publicStringhello(){
return"word";
}
@GetMapping("user")
@ResponseBody
publicStringuser(HttpServletRequestrequest){
Assertionassertion=(Assertion)request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
StringloginName=null;
if(assertion!=null){
AttributePrincipalprincipal=assertion.getPrincipal();
loginName=principal.getName();
log.info("Phóng vấn giả: {}",loginName);
}
return"Phóng vấn giả:"+loginName;
}
@RequestMapping("/logout")
publicStringlogout(HttpSessionsession){
session.invalidate();
return"redirect:"+serverUrlPrefix+"/logout?service="+clientHostUrl+"/sso-client/user";
}
}
- Phóng vấn:
http://127.0.0.1:8888/sso-client/hello
Ngộ đáo vấn đềVị nhận chứng thụ quyền đích phục vụ
- Giải quyết phương án
【 đệ nhất bộ 】 trực tiếpvim cas.jar
Tu cảicas.jar/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json
Nguyên lai đích tiệt đồ như hạ:
Cải thành như hạ sở kỳ (serviceId
Trung thiêm gia liễuhttp
):
{
"@class":"org.apereo.cas.services.RegexRegisteredService",
"serviceId":"^(https|http|imaps)://.*",
"name":"wlf-test",
"id":10000001,
"description":"This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
"evaluationOrder":10000
}
【 đệ nhị bộ 】 tu cải/etc/cas/config/cas.properties
Thiêm gia như hạ nhất hành:
# khải dụng gia tái JSON phối trí văn kiện
cas.serviceRegistry.initFromJson=true
Trọng khải cas khách hộ đoan hòa phục vụ đoan khôi phục chính thường