[英]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.