SDK (JWT身份驗證) 資料驗證過濾器

2021-08-20 21:51:08 字數 4408 閱讀 2033

參考資料:使用actionfilterattribute 記錄 webapi action 請求和返回結果記錄

什麼是sdk,sdk其實就是做最傻瓜化的封裝,別人能夠很有好的呼叫你的方法

這裡我們做乙個客戶端像服務端發起http請求的例子,在這個例子中我們封裝乙個.net的sdk

第一步:建立乙個名字叫apiskd的類庫

建立乙個類:sdkresult.cs

namespace apiskd

/// /// 響應狀態碼

}}

建立乙個類:sdkclient.cs

namespace apiskd

/// /// 非同步get請求

///

/// 請求引數鍵值對

///

public async taskgetasync(string url, idictionaryrequestparamsdic)

//對請求引數的key按照公升序排序,然後再用等號將key和value連線起來:例如 name=lily

var rporderitems = requestparamsdic.orderby(r => r.key).select(r => r.key + "=" + r.value);

var requestparamsstr = string.join("&", rporderitems); //用&號拼接請求引數;例如:age=26&name=lily

}/// /// 非同步post請求

///

/// 請求引數鍵值對

///

public async taskpostasync(string url, dictionaryrequestparamsdic)

//對請求引數的key按照公升序排序,然後再用等號將key和value連線起來:例如 name=lily

var rporderitems = requestparamsdic.orderby(r => r.key).select(r => r.key + "=" + r.value);

var requestparamsstr = string.join("&", rporderitems); //用&號拼接請求引數;例如:age=26&name=lily

}

現在我們就新增乙個暴露給外面呼叫的類,例如 使用者操作類,我們暫且給它取名叫userapi(只是命名中有個api,但是他不是乙個api專案)

建立乙個類:userapi.cs (暴露在外,供客戶端呼叫)

namespace apiskd

public async taskaddasync(string phonenum, string nickname, string password)

//使用newtonsoft把json格式反序列化為long

long id = jsonconvert.deserializeobject(result.result); //需要安裝:newtonsoft.json

return id;

}else}}

}

建立乙個控制台應用程式:在裡面呼叫我們封裝的sdk類庫的userapi類,實現新增資料使用者的目的

}}服務端中我們就簡單的放了乙個控制器方法

}}並在webapi中我們還建立了乙個身份驗證的過濾器

namespace webapi

}ienumerablesigns;

if (!actioncontext.request.headers.trygetvalues("sign", out signs)) //從請求報文頭中獲取sign;}

string sign = signs.first();

string requestdatastr = ""; //請求引數字串

list> requestdatalist = new list>();//請求引數鍵值對

if (actioncontext.request.method == httpmethod.post) //如果是post請求

//requestdatalist就是按照key(引數的名字)進行排序的請求引數集合

requestdatalist = requestdatalist.orderby(kv => kv.key).tolist();

var segments = requestdatalist.select(kv => kv.key + "=" + kv.value);//拼接key=value的陣列

requestdatastr = string.join("&", segments);//用&符號拼接起來}}

if (actioncontext.request.method == httpmethod.get) //如果是get請求

//使用者傳進來md5值和計算出來的比對一下,就知道資料是否有被篡改過

if (sign.equals(computedsign, stringcomparison.currentcultureignorecase))

else;}

}/// /// 獲取post請求的請求引數內容

/*這裡也要注意: stream.position = 0;

當你讀取完之後必須把stream的位置設為開始

因為request和response讀取完以後position到最後乙個位置,交給下乙個方法處理的時候就會讀不到內容了。

*/stream.position = 0;

return result;}}

}

這裡提供乙個jwt輔助類

using jwt;

using jwt.algorithms;

using jwt.serializers;

using microsoft.aspnet.signalr.hubs;

using system;

using system.collections.generic;

using system.configuration;

using system.linq;

using system.web;

using usercenter.netsdk;

namespace im.web

/// /// 把user加密放到jwt字串中

///

///

/// jwt字串

public static string encrypt(user user)

/// /// 從jwt token中解密出來user

///

///

/// 如果token錯誤、被篡改或者過期,則返回null

public static user decrypt(string token)

catch (tokenexpiredexception)

catch (signatureverificationexception)

}/// /// 獲得當前登入使用者的user(供asp.net mvc用)

}/// /// 獲得當前登入使用者的user(供signalr的hub用)

///

///

///

public static user getuser(hubcallercontext hubcontext)

string token = hubcontext.requestcookies["jwttoken"].value;

return decrypt(token);}}

}

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