2017-02-13 24 views
0

我想自定義OAuth端點URI。 我想發送後身體參數,而不是查詢參數。Spring安全性OAuth2請求作爲對象而不是查詢參數

現在我的要求就是喜歡 -

example.com/oauth/token?grant_type=password&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&username={USERNAME}&password={PASSWORD} 

但我想它是這樣的。

example.com/oauth/token

請求體 -

{ 
    grant_type=password, 
    client_id={CLIENT_ID}, 
    client_secret={CLIENT_SECRET}, 
    username={USERNAME}, 
    password={PASSWORD} 
} 

我應該怎麼辦呢?

+0

OAuth的重點在於動詞和URL模式是標準化的......使用POST而不是GET的用例是什麼? –

+0

只是爲了讓它更安全。我不想在url中公開我的參數值。 –

+0

您應該始終使用HTTPS。 **如果不是,GET和POST參數都以純文本**的形式發送,並且都不安全。我建議使用HTTPS並堅持使用標準。 –

回答

0

正確實施授權服務器的令牌端點不接受GET請求,因爲RFC 6749,「3.2. Token Endpoint」表示如下:

與客戶端的時候必須使用HTTP「POST」方法訪問令牌請求。

因此,您的授權服務器的令牌端點應拒絕GET請求。

RFC 6749,「​​」表示使用資源所有者密碼憑據流的令牌請求的請求參數應該以「application/x-www-form-urlencoded」格式嵌入到請求正文中。以下是摘自「4.3.2. Access Token Request」的摘錄。

POST /token HTTP/1.1 
Host: server.example.com 
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW 
Content-Type: application/x-www-form-urlencoded 

grant_type=password&username=johndoe&password=A3ddj3w 

因此,你不必來定製你的授權服務器。如果服務器正確實現,則其令牌端點會接受POST請求。

1

由spring-oauth2創建的令牌端點已經處理POST。 由於TokenEndpoint類將所有參數預期爲@RequestParam參數,因此很難將其自定義爲接受JSON請求主體。但是,如果您關心的是安全問題(因爲HTTPs不能確保查詢參數安全),您確實可以通過發佈發送請求參數。這只是以「form-data」或「x-www-form-urlencoded」的形式發送請求的問題。這些是在請求主體中發送任意鍵值參數的兩種方式,以服務器顯示的方式,因爲它們是常規的請求參數。所以這是讓你的客戶使用它的問題。

另外,請注意,在spring-oauth2中可以禁用GET端點,這種方式迫使客戶使用上述方法之一使用POST。

相關問題