基於角色的安全性程式設計入門示例

2022-02-04 21:29:22 字數 4009 閱讀 3482

為了能更好地理解

.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伺服器,但仍然使...