最近專案需要給手機端提供資料,採用webapi的方式,之前的許可權驗證設計不是很好,這次採用的是basic基礎認證。
我們知道,asp.net的認證機制有很多種。對於webapi也不例外,常見的認證方式有
我們知道,認證的目的在於安全,那麼如何能保證安全呢?常用的手段自然是加密。basic認證也不例外,主要原理就是加密使用者資訊,生成票據,每次請求的時候將票據帶過來驗證。這樣說可能有點抽象,我們詳細分解每個步驟:
首先登陸的時候驗證使用者名稱、密碼,如果登陸成功,則將使用者名稱、密碼按照一定的規則生成加密的票據資訊ticket,將票據資訊返回到前端。
如果登陸成功,前端會收到票據資訊,然後跳轉到主介面,並且將票據資訊也帶到主介面的actionresult裡面(例如跳轉的url可以這樣寫:/home/index?ticket=ticket)
在主介面的actionresult裡面通過引數得到票據資訊ticket,然後將ticket資訊儲存到viewbag裡面傳到前端。
在主介面的前端,傳送ajax請求的時候將票據資訊加入到請求的head裡面,將票據資訊隨著請求一起傳送到服務端去。
在webapi服務裡面定義乙個類,繼承authorizeattribute類,然後重寫父類的onauthorization方法,在onauthorization方法裡面取到當前http請求的head,從head裡面取到我們前端傳過來的票據資訊。解密票據資訊,從解密的資訊裡面得到使用者名稱和密碼,然後驗證使用者名稱和密碼是否正確。如果正確,表示驗證通過,否則返回未驗證的請求401。
這個基本的原理。下面就按照這個原理來看看每一步的**如何實現。
建立快取類,儲存使用者狀態資訊cachemanager類
public class cachemanager/// /// get the singleton instance.
///
///
public static cachemanager instance()}}
return cachemanager;
}/// /// 新增使用者資訊
///
///
///
public void add(string key, object value)
}/// /// 刪除使用者狀態資訊
///
///
public void remove(string key)
/// /// 初使化快取
///
public void invalidatecache()
/// /// 獲取使用者狀態資訊
///
///
///
public object get(string key)
return obj;
}}
public class requestauthorizeattribute : authorizeattributeelse
}//如果取不到身份驗證資訊,並且不允許匿名訪問,則返回未驗證401
else
}//校驗使用者名稱密碼
private bool validateticket(string encryptticket)
else
}}
在公共方法中建立獲取票據方法
/// /// 獲取票據///
/// 票證名稱
/// 票證過期時間
/// 票證資料
///
public static formsauthenticationticket getticket(string ticketname, int timestate, string userdata)
&", ticketname, userdata),
formsauthentication.formscookiepath);
return ticket;
}
使用者登入時,存入票據
因為webapi涉及到跨域請求,所以在webconfig中需要加入一段**,解決跨域問題,authorization是向http的head裡面加入請求票據,否則瀏覽器請求不成功。
authorization" />
var ticket;$(function () ,
datatype: 'json',
success: function (data, status)
alert("登入成功");
//登入成功之後將使用者名稱和使用者票據帶到主介面
ticket = data.apidata.ticket;
$("#hdticket").val(ticket);}},
error: function (e) ,
complete: function ()
});});
function myfunction() ,
//xhrfields: ,
//crossdomain: true,
success: function (data) ,
error: function (data)
});}
django 使用者登入及驗證
1 登入頁面如下 2 登入乙個使用者 從檢視中登入乙個使用者,請使用login 它接受乙個httprequest物件和乙個user物件。login 使用django的會話框架來將使用者的id儲存在會話中。注意任何在匿名會話中設定的資料都會在使用者登入後的會話中都會記住。先呼叫authenticate...
使用者登入驗證
一 sql資料庫聯合查詢有四種 1 內連線 inner join 2 左連線 left outer join 3 右連線 right outer join 4 外連線 full outer join 舉例 select a.studentname,b.testtime,b.chengji from ...
使用者登入驗證
環境window,資料庫oracle11g 使用者分為sys系統使用者和no sys非系統使用者,所以分不同的方式 驗證1,sys系統使用者,驗證分為兩種 1 作業系統驗證 通過驗證登入使用者的作業系統來限制使用者的許可權。用安裝資料庫的使用者去登入資料庫,就是sysdba許可權。sqlplus a...