用戶身份驗(yàn)證是 Web 應(yīng)用程序中的一項(xiàng)基本功能,因此人們可以創(chuàng)建和訪問(wèn)自己的帳戶,但不幸的是,身份驗(yàn)證并不總是很容易設(shè)置,可能經(jīng)常錯(cuò)誤地實(shí)現(xiàn)登錄和注銷功能。
本教程將介紹如何使用IDaaS身份服務(wù),用差不多3分鐘的時(shí)間,為應(yīng)用快速的添加一個(gè)現(xiàn)代的身份服務(wù),它能讓我們?cè)?Spring 應(yīng)用中輕松處理用戶數(shù)據(jù)和授權(quán)。
本節(jié)介紹如何使用Spring Boot快速與OneAuth集成,將OneAuth作為WEB應(yīng)用程序的用戶存儲(chǔ)庫(kù)并實(shí)現(xiàn)用戶登錄。
準(zhǔn)備工作
前提條件:
已經(jīng)具備了OneAuth的組織賬戶。如果沒(méi)有?免費(fèi)創(chuàng)建OneAuth開(kāi)發(fā)者賬戶
具備基礎(chǔ)的WEB應(yīng)用程序的開(kāi)發(fā)經(jīng)驗(yàn)
已有或新建的Web應(yīng)用程序或項(xiàng)目,需要集成認(rèn)證流程
請(qǐng)求的示例
請(qǐng)求授權(quán)的的示例,類似如下
https://{yourSubDomain}.oneauth.cn/v1/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read
以下配置將在OneAuth控制臺(tái)完成,配置CALLBACK_URL 和生成CLIENT_ID
創(chuàng)建一個(gè)OneAuth Web應(yīng)用
1. 登錄OneAuth組織賬戶的控制臺(tái)添加應(yīng)用
選擇【應(yīng)用】-【應(yīng)用】-創(chuàng)建應(yīng)用認(rèn)證方式選擇OIDC,應(yīng)用類型選擇Web應(yīng)用,點(diǎn)擊【下一步】

2. 填寫應(yīng)用的登錄重定向地址,
http://localhost:8000/login/oauth2/code/oneauth
當(dāng)用戶成功認(rèn)證后,OIDC 授權(quán)服務(wù)器向Client返回的redirect_uri由該地址指定。詳細(xì)參考OIDC 授權(quán)碼模式

3.【保存】后,OneAuth將為該應(yīng)用生成Clinet ID和Client Secret,后續(xù)在Java Spring Boot的配置中會(huì)用到這兩個(gè)參數(shù)值

創(chuàng)建和配置Spring Boot應(yīng)用
如果您想快速開(kāi)始,只需下載一個(gè)應(yīng)用示例,請(qǐng)下載我們Spring Boot示例
1.您需要將一些依賴項(xiàng)添加到pom.xml
添加后,Spring Security 5的OAuth配置才能正確初始化。
<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.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.將src/main/resources/application.properties重命名為src/main/resources/application.yml
在下面的代碼中填寫:
yourSubDomain:在注冊(cè)時(shí),OneAuth提供的租戶的二級(jí)域名前綴
ClientID: 填寫創(chuàng)建應(yīng)用時(shí),Step 2過(guò)程中OneAuth管理后臺(tái)生成的Client ID
Secret: 填寫創(chuàng)建應(yīng)用時(shí),Step 2過(guò)程中OneAuth管理后臺(tái)生成的Client Secret
server:
port: 8000
spring:
thymeleaf:
cache:false
security:
oauth2:
client:
registration:
oneauth:
client-name: oneauth
client-id: {clientId}
client-secret: {clientSecret}
redirect-uri:'{baseUrl}/login/oauth2/code/{registrationId}'
client-authentication-method: post
scope:
- openid
- profile
provider:
oneauth:
issuer-uri: https://{yourSbuDomain}.oneauth.cn/oauth/v1
user-name-attribute:name
驗(yàn)證是否集成成功
1.重新啟動(dòng)您的應(yīng)用程序,并訪問(wèn)
瀏覽器再次導(dǎo)航到http://localhost:8000 ,您會(huì)看到一個(gè)oneauth的鏈接,單擊該鏈接可以單擊oneauth登錄。

2.單擊oneauth鏈接,登錄
點(diǎn)擊后,您應(yīng)該會(huì)看到一個(gè)登錄屏幕。

3. 輸入用戶名和密碼,認(rèn)證完成后跳轉(zhuǎn)回應(yīng)用
輸入用于創(chuàng)建帳戶的憑據(jù),登錄后應(yīng)該會(huì)看到類似以下的屏幕。

總結(jié)
我們通過(guò) Spingboot 構(gòu)建了一個(gè)簡(jiǎn)單的應(yīng)用,利用Open ID Connect 協(xié)議并對(duì)接 OneAuth 提供的身份服務(wù),實(shí)現(xiàn)了保護(hù)我們特定路由的方法。
參考