為了能更好地理解
.net
基於角色的安全性
,從乙個最簡單的例項匯入角色的應用。首先建立乙個簡單的控制台程式,如**清單
1-1所示。
**清單
1-1未新增角色驗證的程式
using
system;
namespace
角色例項
static
void
outhello() }
} 如**清單
1-1,這個程式只有兩個方法:
main
方法和outhello
方法,outhello
方法輸出「
hello world!
」,在main
方法中呼叫
outhello
方法。執行程式會列印字串「
hello world!
」。下面對這個簡單的程式做略微的修改,為它新增一些宣告,如**清單
1-2所示。
**清單
1-2執行主體和主體許可權要求的主體不一致的**
using system;
using system.security.
permission
s; using system.security.
principal
; using system.threading;
namespace
角色例項
catch(securityexception e)
console.read(); } [
principal
permission
(securityaction.demand,role="
administrators
")]
static void outhello() }
} 在**清單
1-2中,主要有三處變化:
1)新添了三個命名空間的引用,分別為
system.security.permissions
、system.security.principal
和system.threading
。通過第
4章的講解,我們對
system.security.permissions
命名空間已經很熟悉了,這裡要使用其中的主體許可權(
principalpermission
)。system.security.principal
是包含有關主體操作內容的命名空間。
system.threading
是有關執行緒操作的命名空間。
2)對於
outhello
方法,宣告了
principalpermission
許可權,要求
administrators
組成員才有許可權執行此方法。
3)對於
main
方法,使用以下語句設定當前執行緒的主體為匿名使用者:
thread.currentprincipal = new windowsprincipal(windowsidentity.getanonymous())
下面來看**清單
1-2的
執行結果,如圖
1-1所示。
圖1-1
**清單
1-2執行結果
圖1-1
表明,main
方法在呼叫
outhello
方法時引發了
securityexception
異常。因為
main
方法設定的主體為匿名使用者,而
outhello
方法要求的是
administrators
組使用者。
下面把main
方法的執行執行緒設定為當前的
administrators
使用者,再看看執行結果。修改後的
main
方法如**清單
1-3所示。
**清單
1-3執行主體和主體許可權要求的主體一致的**
static
void
main(
string
args)
catch
(securityexception
e)
console
.read();
} **清單
1-3設定了
main
方法執行執行緒的主體為當前使用者,本書測試的當前使用者為
administrator(
最高許可權使用者,屬於
administrators組)
,此時的執行結果如圖
1-2所示。
圖1-2
**清單
1-3的
執行結果
通過**清單
1-1、**清單
1-2和**請單
1-3的
對比,可以粗略地了解主體驗證的作用。在前面的**中採用了宣告式安全檢查的方法,同其他許可權一樣,這裡仍然可以使用命令式安全檢查的方法來達到同樣的效果,對於宣告式和命令式安全檢查還不太熟悉的讀者可以回顧第
41-4
所示。**清單
1-4使用命令式安全檢查來指定主體許可權
namespace
角色例項
catch (
securityexception
e)
console
.read();
} static void outhello() }
}**清單
1-4中,通過建立
principal
permission
類的例項的方式來標識當前方法的主體許可權請求。使用
principal
permission
模擬使用
principal
permissioatrribute
進行宣告的方法更加靈活,可以充分運用它的多個過載方法。
下面繼續修改
main
方法,使用標識物件,如**清單
1-5所示。
**清單
1-5使用標識
namespace
角色例項
; genericprincipal
principal = new
genericprincipal
(identity, roles);
.currentdomain.setthread
principal
(principal);
outhello();
console
.read();
} static void outhello() }
} 在**清單
1-5的
main
方法中,首先建立使用者自定義的標識物件
identity
,然後建立角色陣列
roles
,並指定主體擁有的角色陣列,最後設定當前應用程式域的主體。在
outhello
方法中,要求標識名稱為
xx;而在
main
方法中指定的標識為
xuanhun
,執行程式將引發異常,如圖
1-3所示。
圖1-3
標識不一致的執行結果
到目前為止,我們體驗了
.net
的角色驗證,在感性上有了簡單的認識。更詳細內容,可以參考《
.net
安全揭秘》第五章。
基於http的API的安全性
基於http的api,怎麼保證安全性?當前的資訊系統,安全第一道關卡,當然就是密碼了。api也不例外。要麼就是一次性登入,獲得乙個短期內有效的token 要麼就是每次請求都帶上賬號和密碼。如果是每次都帶上賬號和密碼,那麼api站點必須要求使用https,否則有洩露風險。當然變通方法可以是採用非對稱加...
併發程式設計的安全性(2)
安全 安全的首先是正確的且是我們預期的,正確性 某個類的行為與其規範完全一致。在良好的規範中通常會定義各種不變性條件來約束物件的狀態,以及定義各種後驗條件來描述物件操作的結果。我們根據這些規範在單執行緒中執行獲取正確的預期結果,代表這個程式的正確性,即所見即所知。而當多個執行緒同時訪問某個類,這個類...
提公升UNIX安全性的Unix SSH示例配置
管理unix伺服器通常需要通過命令列訪問,這意味著使用ssh 安全shell 環境,並有可能通過網際網路直接訪問這個環境。現代的unix發行版都帶有預配置的ssh,但也有一些後安裝的伺服器配置變更能夠使你的生活更輕鬆,並增加你組織中的unix系統的安全性。如果你使用命令列訪問unix伺服器,但仍然使...