您好,登錄后才能下訂單哦!
如何實現易水公共組件的SSO功能,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
如今,隨著互聯網技術的發展,網絡用戶規模越來越大,假如公司的每一個應用都建立一個用戶系統,不僅極大的增加了開發的工作量,而且容易形成了信息孤島,用戶在使用公司的每個產品時都需要重復注冊一次。因此許多公司為了統一管理,建立了統一認證中心,其他的應用需要通過單點登錄即可獲取用戶信息,用戶登錄該公司的其他應用時也不需要在重新注冊,大大節省公司用戶導入成本,也提高用戶使用體驗。
對于單點登錄(SSO)而言,現在技術比較成熟,網上各種教程也比較多,但是很多文章都講述的不怎么全面,在這里基于spring security簡單明了的介紹下時如何實現單點登錄功能。
在使用單點登錄之前,需要先搭建一個認證中心,例如通過易水公共組件快速搭建一個自己的認證中心,也可以使用現在網絡上現成的認證中心,如 谷歌 或 github.
完整的pom文件內容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.yishuifengxiao.sso-client</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth3-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- <dependency>--> <!-- <groupId>org.springframework.security.oauth.boot</groupId>--> <!-- <artifactId>spring-security-oauth3-autoconfigure</artifactId>--> <!-- <version>2.2.0.RELEASE</version>--> <!-- </dependency>--> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
在配置文件中加入以下信息
spring.security.oauth3.client.registration.yishui.provider=yishui # 登錄界面上顯示的登錄類型的名字,可不填 spring.security.oauth3.client.registration.yishui.client-name=custom # 該用戶對應的clientId spring.security.oauth3.client.registration.yishui.client-id=zhiyubujian # 該用戶對應的clientSecret spring.security.oauth3.client.registration.yishui.client-secret=zhiyubujian # 這里是定值為authorization_code,表示使用授權碼模式模式從授權服務器中獲取token spring.security.oauth3.client.registration.yishui.authorization-grant-type=authorization_code # 回調地址,應該和授權服務器中登記的回調地址一模一樣,否則會出錯,支持通配符,也可以想下面那樣配置為完整的地址 spring.security.oauth3.client.registration.yishui.redirect-uri={baseUrl}/login/oauth3/code/{registrationId} #spring.security.oauth3.client.registration.yishui.redirect-uri=http://192.168.0.172:8006/oauth3/code # 授權服務器的authorization地址 spring.security.oauth3.client.provider.yishui.authorization-uri=http://192.168.0.172:8000/oauth/authorize # 授權服務器獲取token的地址 spring.security.oauth3.client.provider.yishui.token-uri=http://192.168.0.172:8000/oauth/token # 授權服務器中獲取登錄用戶信息的地址 spring.security.oauth3.client.provider.yishui.user-info-uri=http://192.168.0.172:8000/me #定值,必須配置,否則會出錯 spring.security.oauth3.client.provider.yishui.user-name-attribute=userAuthentication
注意:
上述配置中的yishui
可以為任意值,但是一般最好為有標識意義的值,例如使用google賬號登錄時,可以進行如下配置:
spring: security: oauth3: client: registration: google: client-id: google-client-id client-secret: google-client-secret
@SpringBootApplication @RestController //@EnableOAuth3Sso public class DemoApplication { @GetMapping("/me") public Authentication user(Authentication authentication) { return authentication; } @GetMapping("/") public String index(Model model, @RegisteredOAuth3AuthorizedClient OAuth3AuthorizedClient authorizedClient, @AuthenticationPrincipal OAuth3User oauth3User) { model.addAttribute("userName", oauth3User.getName()); model.addAttribute("clientName", authorizedClient.getClientRegistration().getClientName()); model.addAttribute("userAttributes", oauth3User.getAttributes()); return "index"; } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
完成上述配置以后,我們就可以使用單點登錄功能了。
例如當我們想要訪問 http://localhost:8080/me
時,系統會重定向到到默認的登錄頁面
注意:這里顯示的是默認的登錄頁面,如果用戶想要顯示自定義登錄界面,可以參見 易水公共組件里面的相關章節進行修改和美化。
點擊上面的登錄鏈接,會跳轉到授權服務器的登錄頁面
在此頁面輸入用戶名和密碼登錄成功后,請求會跳轉到原始等請求地址
響應結果如下:
看完上述內容,你們掌握如何實現易水公共組件的SSO功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。