最近被跨域問題搞得焦頭爛額,在前端ajax往伺服器端傳送請求的時候,我嘗試在請求報文header裡面自定義請求頭:
$.
ajax(,
success:
function
(data, status)
, error:
function
(error)})
;
後端伺服器:if(
!actioncontext.request.headers.
trygetvalues()
;}可是本來以為這樣寫沒問題,可是瀏覽器端一直給我返401:unauthorized錯誤,並且提示 已攔截跨源請求:同源策略禁止讀取遠端資源。(原因:cors 請求未能成功)
各種方法嘗試了,未果。。。。
之後發現是伺服器端未驗證通過客戶端的methods,需要在authorizationfilter過濾器的最開始,驗證請求報文的方法是不是options,如果不是直接打回,是的話返回200:accepted,然後進行後面authorizationfilter的驗證。
string method = actioncontext.request.method.
tostring()
;if(method ==
"options"
)
注意:必須給瀏覽器返回乙個200碼,才能進行自定義頭部資訊的驗證
總之,對症下藥就好了~~
}//orderedqs就是按照key(引數的名字)進行排序的querystring集合
var orderedqs = actioncontext.request.
getquerynamevaluepairs()
.orderby
(kv => kv.key)
;var segments = orderedqs.
select
(kv => kv.key +
"="+ kv.value)
;//拼接key=value的陣列
string qs = string.
join
("&"
, segments)
;//用&符號拼接起來
string computedsign = md5helper.
computemd5
;//計算qs+secret 的md5值
//使用者傳進來md5值和計算出來的比對一下,就知道資料是否有被篡改過
if(sign.
equals
(computedsign,stringcomparison.currentcultureignorecase)
)else;}
}}}
"access-control-allow-origin" value=
"*"/
>
"content-type" value=
/>
"access-control-allow-headers" value=
/>
"access-control-allow-methods" value=
"get, post, put, delete, options"
/>
<
/customheaders>
Forms 身份驗證
配置應用程式使用 forms 身份驗證 如果應用程式的根目錄中有 web.config 檔案,請開啟該檔案。複製 在system.web元素中,建立乙個authentication元素,並將它的mode屬性設定為 forms,如下面的示例所示 複製 在authentication元素中,建立乙個fo...
WebService身份驗證
web service身份驗證解決方案一 通過通過soap header身份驗證。1.我們實現乙個用於身份驗證的類,檔名mysoapheader.cs mysoapheader類繼承自system.web.services.protocols.soapheader。且定義了兩個成員變數,userna...
WebServices身份驗證
最近遇到乙個問題,暴露在網路上的web service如何做身份驗證,而不被其他人說是用。mysoapheader.cs類 using system using system.collections.generic using system.linq using system.web namespa...