中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oauth2快速入門過程是怎樣的

發布時間:2021-10-11 09:42:41 來源:億速云 閱讀:126 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關oauth2快速入門過程是怎樣的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一 快速啟動

1 在項目中加入相關的依賴

需要 導入 易水公共組件 和 spring-security-oauth3-autoconfigure兩個依賴

<dependency>
    <groupId>org.springframework.security.oauth.boot</groupId>
    <artifactId>spring-security-oauth3-autoconfigure</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.yishuifengxiao.common</groupId>
    <artifactId>common-spring-boot-starter</artifactId>
    <version>4.1.2</version>
</dependency>
2 在項目加入以下代碼
    @Configuration
	public class CustomOauth3Config extends OAuth3Config{

	}
3 加上開啟注解

加上@EnableResourceServer@EnableAuthorizationServer注解

完全開啟示例代碼如下:

@Configuration
@EnableWebSecurity
@EnableResourceServer
@EnableAuthorizationServer
public class SecurityConfig extends AbstractSecurityConfig {

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		// 調用父類中的默認配置
		applyAuthenticationConfig(http);
	}

	@Configuration
	public class CustomOauth3Config extends OAuth3Config{

	}

}
4 實現自定義認證邏輯

實現UserDetailsService接口 和 UserDetailsService 接口,完成自己的認證邏輯,并將其注入到spring 的上下文中

【特別注意】在用戶未按照此步驟配置自己的授權邏輯時,組件會默認進行一個缺省實現。在缺省實現的情況下,用戶能使用任意用戶名配合密碼(12345678)進行登錄

需要特別注意的是,在下面的授權方式之中,UserDetailsService負責校驗clientIdclientSecret是否正確,UserDetailsService負責校驗usernamepassword是否正確。

完成前面的步驟之后,一個簡單的oauth3認證服務器就搭建完成了。

二 四種授權方式

密碼模式
POST /oauth/token HTTP/1.1
     Host: oauth3.yishuifengxiao.com
     Authorization: Basic fdsfdsfdsfds
     Content-Type: application/x-www-form-urlencoded

     grant_type=password&username=johndoe&password=A3ddj3w

在請求中,各參數的含義如下

  • grant_type:表示授權類型,此處的值固定為"password",必選項。

  • username:表示用戶名,必選項。

  • password:表示用戶的密碼,必選項。

  • scope:表示權限范圍,可選項。

  • Authorization: 請求頭參數 ,值是 clientId:clientSecret 經過 base64 編碼后的值

下面是一個響應的例子

{
    "access_token": "BDF867DE69F05143C709",
    "token_type": "bearer",
    "refresh_token": "d7cda8fb15714209a9f9f3b039a0034f",
    "expires_in": 43199,
    "scope": "read write trust",
    "client_id": "yishui"
}
客戶端模式
POST /oauth/token HTTP/1.1
     Host: oauth3.yishuifengxiao.com
     Authorization: Basic fdsfdsfdsfds
     Content-Type: application/x-www-form-urlencoded

     grant_type=client_credentials

在本請求中,各參數的含義如下

  • grant_type:表示授權類型,此處的值固定為"client_credentials",必選項。

  • Authorization: 請求頭參數 ,值是 clientId:clientSecret 經過 base64 編碼后的值

下面是一個響應的例子

{
    "access_token": "BDF867DE69F05143D3BF",
    "token_type": "bearer",
    "expires_in": 43199,
    "scope": "read write trust",
    "client_id": "yishui"
}

同密碼模式相比,客戶端模式的響應中缺少了 refresh_token 參數

授權碼模式

授權碼模式首先需要保證 spring security 的登陸功能正常可用。只有開啟 spring security 的登陸功能可用,才能開啟授權碼功能。

先訪問一下請求

GET /oauth/authorize?response_type=code&client_id=yishui&state=xyz
&redirect_uri=http://demo.yishuifengxiao.com/demo HTTP/1.1
Host: oauth3.yishuifengxiao.com

在本請求中,各參數的含義如下:

  • code:表示授權碼,必選項。該碼的有效期應該很短,通常設為 10 分鐘,客戶端只能使用該碼一次,否則會被授權服務器拒絕。該碼與客戶端 ID 和重定向 URI,是一一對應關系。

  • state:如果客戶端的請求中包含這個參數,認證服務器的回應也必須一模一樣包含這個參數。

  • client_id: 用戶的 client_id

在進行此請求時,假如用戶沒有登錄,spring security 會進行攔截,因此需要用戶先進行登錄。

在正常情況下,訪問以上請求會被重定向到

http://demo.yishuifengxiao.com/demo?code=fsfsdf &state=xyz

服務器回應客戶端的 URI,包含以下參數:

  • code:表示授權碼,必選項。該碼的有效期應該很短,通常設為 10 分鐘,客戶端只能使用該碼一次,否則會被授權服務器拒絕。該碼與客戶端 ID 和重定向 URI,是一一對應關系。

  • state:如果客戶端的請求中包含這個參數,認證服務器的回應也必須一模一樣包含這個參數。

通過上面的請求得到了code以后,用戶需要使用下面請求獲取到授權碼

POST /oauth/token HTTP/1.1
Host: oauth3.yishuifengxiao.com
Authorization: Basic fdsfdsfdsfds
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=fsfsdf
&redirect_uri=demo.yishuifengxiao.com/demo

在本請求中,各參數的含義如下:

  • grant_type:表示使用的授權模式,必選項,此處的值固定為"authorization_code"。

  • code:表示上一步獲得的授權碼,必選項。

  • redirect_uri:表示重定向 URI,必選項,且必須與 A 步驟中的該參數值保持一致。

  • client_id:表示客戶端 ID,必選項。

簡化模式
GET /oauth/authorize?response_type=token&client_id=yishui&state=xyz
        &redirect_uri=http://demo.com/demo    HTTP/1.1
    Host: server.example.com

在本請求中,各參數的含義如下:

  1. response_type:表示授權類型,此處的值固定為"token",必選項。

  2. client_id:表示客戶端的 ID,必選項。

  3. redirect_uri:表示重定向的 URI,可選項。

  4. scope:表示權限范圍,可選項。

  5. state:表示客戶端的當前狀態,可以指定任意值,認證服務器會原封不動地返回這個值。

刷新 token
POST /oauth/token HTTP/1.1
     Host: oauth3.yishuifengxiao.com
     Authorization: Basic fdsfdsfdsfds
     Content-Type: application/x-www-form-urlencoded

     grant_type=refresh_token&refresh_token=sdff

請求中個參數的含義:

  • granttype:表示使用的授權模式,此處的值固定為"refreshtoken",必選項。

  • refresh_token:表示早前收到的更新令牌,必選項。

  • scope:表示申請的授權范圍,不可以超出上一次申請的范圍,如果省略該參數,則表示與上一次一致。

三 access_token 使用

通過 前面的方法獲取到 access_token 之后,一般有兩種使用方法

  • 將 access_token 做為請求參數攜帶在 url 參數上

http://demo.yishuifengxiao.com/user/123?access_token=獲得到的access_token

  • 將 access_token 做為請求參數放在請求頭中

在所有需要授權的請求的請求頭里都攜帶上參數 Authorization=Bearer 獲得到的 access_token

在通用組件中,由于對access_token進行了深度處理,因此用戶可以access_token通過易水工具包里的 DES 工具飯解析出 token 里攜帶的信息。

在解密時需要使用的密鑰由【安全管理】中設置的yishuifengxiao.security.secret-key屬性值決定。

下面是一個 access_token 的解密信息示例

{
    "username": "yishui",
    "clientId": "admin",
    "roles": [
        "ROLE_USER",
        "admin"
    ],
    "grantType": "password"
}

解密信息的各參數的解釋:

  • username: 用戶登錄時使用到的用戶名(在客戶端模式下該值為空)

  • clientId: 用戶登錄時使用的 clientId(在簡化模式下該值為空)

  • roles: 此登錄用戶擁有的角色(即此用戶的 authorities)

  • grantType:access_token 對應的授權類型

access_token反解析出用戶信息僅限于本組件,原生的 oauth3 的access_token不支持此功能

上述就是小編為大家分享的oauth2快速入門過程是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐东| 柳江县| 新绛县| 连城县| 宜兴市| 长春市| 肃宁县| 册亨县| 平远县| 磴口县| 廉江市| 伊吾县| 来宾市| 锡林郭勒盟| 衡阳市| 两当县| 乾安县| 惠东县| 洱源县| 怀仁县| 杭锦后旗| 谷城县| 南充市| 宁南县| 平顺县| 阿鲁科尔沁旗| 乌兰县| 庄浪县| 辽宁省| 策勒县| 凭祥市| 花垣县| 平潭县| 灯塔市| 临夏市| 腾冲县| 怀宁县| 横山县| 龙江县| 广宁县| 荃湾区|