這篇來談談OAuth2,以下是整個OAuth2的簡略流程:
1.User發出第一個request
2.Client app 因為沒拿到任何確認身份的證明,所以重導至Auth server
3.Auth server發出身分證明的表單給User填寫
4.User填寫後回傳給Auth server
5.若Auth server認證身份無誤後,將認證成功的request傳至Client app
6.Client app將request發至Resource server要資料
7.Resource server回傳資料給Client app
8.Client app將最終的response回給User
我們可以透過spring-security-oauth2-authorization-server的denpendency來實作一個autorization server:
<dependency>
<groupId>org.springframework.security.experimental</groupId>
<artifactId>spring-security-oauth2-authorization-server</artifactId>
<version>0.1.2</version>
</dependency>
這個server就是用來認證user資訊(username, password)後產生JWT用的,而這個JWT就會包含有user的資訊,包括authority,後續將透過這個JWT去向resource server要資源。
resource server可以引用spring-boot-starter-oauth2-resource-server來實作:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
resource server要設定有哪些權限的request才能獲取那些資源。
client server可以引用spring-boot-starter-oauth2-client來實作:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
client server負責去跟authentication server要access token,也可和resource server這段程式配合,去自動讓restTemplate透過SecurityContext → getAuthentication 去on上access token,就不用還要自己去放Bearer ${token}在request裡面。