我寫一個.net核心中間件的查詢字符串參數進行加密,在這裏我想用戶看到類似 ?ENC = VXzal017xHwKKPolDWQJoLACDqQ0fE // wGkgvRTdG/GgXIBDd1 而代碼認爲這 ?用戶= 123 &帳戶= 456。中間件加密查詢字符串
我使用IDataProtector加密參數。的invoke()在我的中間件看起來像下面的代碼
if (UriHelper.GetEncodedUrl(context.Request).Contains("?"))
{
string query = ExtractQuery((context.Request.GetEncodedUrl()));
int indexOfEnc = query.IndexOf(PARAMETER_NAME, StringComparison.OrdinalIgnoreCase);
if (indexOfEnc > -1)
{
var enc = context.Request.Query[PARAMETER_NAME];
enc = Decrypt(enc);
context.Request.Path = new PathString(context.Request.Path.Value + enc);
await _next.Invoke(context);
}
else if (context.Request.Method == "GET" || context.Request.Method == "POST")
{
// Encrypt the query string and redirects to the encrypted URL.
// Remove if you don't want all query strings to be encrypted automatically.
string encryptedQuery = Encrypt(query);
string tempRawUrl = UriHelper.GetEncodedUrl(context.Request).ToLower();
if (!(context.Request.Method == "POST" && tempRawUrl.Contains("ha")))
{
context.Response.Redirect(context.Request.Path.Value + "?" + PARAMETER_NAME + "=" + encryptedQuery);
}
}
}
else
{
await _next.Invoke(context);
}
第一次,當我登錄並輸入用戶名/密碼,代碼進來上述ELSEIF部分和被加密的罰款。我在下一次尋找「enc」查詢參數時,當它被解密並且路徑看起來不錯時,if部分中的任何內容都不會執行。我期待它去控制器驗證用戶/通行證。
請跟我來,這是我的第一個中間件,我試圖用我的遺留代碼取代httphandlers。
任何幫助表示讚賞。我已經花了近5個小時的時間,並且似乎無法解決這個問題。
與你的問題沒有關係,但你想通過加密查詢字符串來解決什麼問題? – CodeCaster
我們可能必須在查詢字符串中傳遞客戶端特定的密鑰以及客戶端ID,並且不希望這些密鑰以純文本形式進入。 – Vish