登入網站
因為是 asp.net mvc 的關係, 所以會有 __RequestVerificationToken 這個防偽用的 token
而且他這個表單比較噁心, 需要把 button 塞 login 這樣才 post 得進去, 雷了老半天 XD
最好先手動在 chrome 登進去的時候看看 payload 丟啥免得後續缺參數
登進去就可以拿 cookie 之類的, 看想拿啥就拿啥
1 | var formData = new Dictionary<string, string> |
拿 code
搞 OAuth2 的要訣就是拿 code 換 token
一般 OAuth2 搞的 api 通常都有 client_id client_secret 不過搞爬蟲又是另外一回是
路徑大概都會是這樣 xxx-api-url/authorize
參數類似以下這樣
client_id={client_id}&
redirect_uri={redirect_uri}&
response_type=code&
scope=openid profile xxapi&
nonce=abc123&
state=abc123&
code_challenge={code_challenge}&
code_challenge_method=S256
nonce 隨便亂填即可state 隨便亂填即可code_verifier 長度至少為 43 到 128 個字符的字串, 這個數值很重要, 務必要保留下來後續換 token 會使用到code_challenge SHA256 處理過的 Base64 Stringcode_challenge_method 正常都是選 S256 其他方法的話就要用其他方式處理, line 好像就是用其他的 method, 有點忘了
以下是用 AI 產的類別, 可以幫我們處理 code_verifier code_challenge 這兩個參數
1 | public class PKCEHelper |
當 HttpClient 發送出去請求取得 response 後, 可以用 RequestMessage.RequestUri.ToString() 取得返回 code 的整串網址
然後可以用類似以下程式碼取得 code 或其他參數
1 | var uri = response.RequestMessage.RequestUri.ToString(); |
換 token
拿完 code 以後就可以拿來換 token, 這把需要以下參數, 比較重要的就是 code_verifier redirect_uri 要跟先前拿 code 一致
可以用 FormUrlEncodedContent 這個類別來包參數, 最後打出去就大功告成了, 灑花 ~
路徑應該會是 xxx-api-url/token 而且通常可以不用登入直接 post 丟過去正確的話 token 就會回來
1 | var postData = new Dictionary<string, string> |