簡體   English   中英

Spring Security OAuth2請求作為對象而不是查詢參數

[英]Spring security OAuth2 request as object instead of query parameters

我想自定義OAuth端點URI。 我想在帖子正文中發送參數,而不是查詢參數。

現在我的要求是-

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}
}

我該怎么辦?

正確實現的授權服務器的令牌端點不接受GET請求,因為RFC 6749“ 3.2。令牌端點 ”表示如下:

客戶端在發出訪問令牌請求時必須使用HTTP“ POST”方法。

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

RFC 6749,“ 4.3。資源所有者密碼憑證授予 ”表示,使用資源所有者密碼憑證流的令牌請求的請求參數應以“ application / x-www-form-urlencoded”的格式嵌入請求體中。 以下摘錄自“ 4.3.2。訪問令牌請求 ”。

 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請求。

spring-oauth2創建的令牌端點也已經處理了POST。 很難對其進行自定義以接受JSON請求主體,因為TokenEndpoint類期望所有參數都為@RequestParam參數。

但是,如果您擔心安全性(因為HTTP不保護查詢參數),則確實可以通過post發送請求參數。 只需以“表單數據”或“ x-www-form-urlencoded”形式發送請求即可。 這是在請求正文中發送任意鍵值參數的兩種方式,這是服務器在常規請求參數中所看到的一種方式。 因此,這是使您的客戶使用此問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM