FluorineFx 認證與授權

2022-01-31 14:38:21 字數 3944 閱讀 8564

對認證與授權沒啥概念的新同學,建議先看下 .net中的認證(authentication)與授權(authorization),然後再繼續。

flash/flex在通過fluorinefx呼叫.net中的方法時,同樣也會遇到認證與授權問題,即:

「是否隨便乙個阿貓阿狗都能來呼叫我的方法?」或者可以理解為:「呼叫我的方法前是否需要登入?」 這就是認證

「門衛放進來後,是不是不管什麼身份的人,都能來拿東西?」或者可以理解為:「登入後的使用者,具備何種資格的人才能呼叫方法?」 這就是授權

步驟:1、先建立自己的logincommand類(相當於門衛,用於把關):demologincommand

using system.collections;

using system.security.principal;

using fluorinefx.security;

namespace _04_authentication

); return principal;

}else //檢驗不通過的處理}}

}

2、再建立乙個不需要認證就能隨便呼叫的遠端服務 demologinservice

using system;

using system.collections.generic;

using system.linq;

using system.web;

using fluorinefx;

namespace _04_authentication

//同樣,這裡方法的名字其實也可以隨便起

public bool logout()}}

3、為了對比,再來建立乙個需要認證的遠端服務:demosecureservice

using system;

using system.collections.generic;

using system.linq;

using system.web;

using fluorinefx;

namespace _04_authentication}}

等一下,提個問題:比較這個服務跟剛才建立的服務,除了裡面的方法名稱(及相關的方法處理邏輯)不同,本質上沒區別吧? 憑啥說呼叫這個服務就需要認證,而剛才那個服務就能隨便呼叫?

很好,希望大家帶著這個問題繼續,後面會揭曉。

先打個岔:回想一下asp.net中後台目錄許可權的處理,我們可以在web.config 中通過配置來決定某個目錄是否可訪問

這段配置的意思就是 /admin目錄,匿名使用者無法訪問(即要求登入),同時"買家","賣家"二種角色被拒絕了(即:就算你登入了,只要你是"買家"或"賣家"角色,同樣也訪問不了)

fluorinefx中,同樣也是用配置來實現許可權訪問的:

先看remoting-config.xml的配置

<?xml version="1.0" encoding="utf-8"?>

*_04_authentication.demologinservice

關鍵地方已經注釋了,這個配置就表明了_04_authentication.demologinservice不需要登入就能呼叫,而其它服務呼叫時要受到"privileged-users"的限制,那麼這個限制到底如何描述的呢?

services-config.xml配置

<?xml version="1.0" encoding="utf-8" ?>

custom

admin

user

同樣:重點地方已經加了注釋。

另外乙個重要配置:fluorinefx說到底是宿主在asp.net iis環境中的,所以它的認證票據同樣是儲存在cookie中的,web.config的表單認證方式要設定為forms,即

<?xml version="1.0"?>

ok,服務端就全部完成了,再來看flash端的呼叫:

ui介面:

先講下我們要做什麼:

a、點選「登入」或「登出」時,呼叫不需要登入的demologinservice

b、點選"遠端呼叫"時,呼叫需要認證的demosecureservice

**一下結果:

點選「登入」前,如果直接點選「遠端呼叫」,應該會呼叫失敗(因此此時尚未登入認證)

如果先點選「登入」後,再點選「遠端呼叫」,因為這時已經登入認證過了,所以應該成功

完整flash**:

package 

else

this._btnlogin.addeventlistener(mouseevent.click,btnlogin_click);

this._btnlogout.addeventlistener(mouseevent.click,btnlogout_click);

this._btncall.addeventlistener(mouseevent.click,btncall_click);

} //登入

private function btnlogin_click(e:mouseevent):void

private function loginsuccess( pevt:resultevent ):void

private function loginfailure( pevt:faultevent ):void

//登出

private function btnlogout_click(e:mouseevent):void

private function logoutsuccess( pevt:resultevent ):void

private function logoutfailure( pevt:faultevent ):void

//遠端呼叫需要認證的服務

private function btncall_click(e:mouseevent):void

private function callsuccess( pevt:resultevent ):void

private function callfailure( pevt:faultevent ):void}}

測試執行的截圖:

這是一上來就直接點選"遠端呼叫"的結果,注意右側的大文字框:requested access is not allowed 即訪問不允許,說明這個服務是需要認證才能呼叫的。

如果點選「登入」後,再點選"遠端呼叫",這回成功了,說明認證起作用了。

最後再囉嗦一下:前面提到了fluorinefx的認證票據跟asp.net一樣,是儲存在cookie的,所以如果您把swf嵌入到網頁上,在flash中點選登入後,如果在其它aspx頁面上用

else 

%>

同樣也能檢測出使用者的登入狀態!(前提是不要關閉剛才那個嵌入swf的頁面)

唯一遺憾的是:fluorinefx生成的cookie認證票據中,並未包含roles角色資訊,所以在aspx頁面上無法用isinrole來判斷當前使用者的角色(我跟蹤了一下,fluorinefx在cookie中僅儲存了使用者名稱、密碼以及一些唯一性標識,官方提供的認證演示中雖然有用isinrole來判斷,但其實是沒用的)。

當然這個問題,您可以修改fluorinefx的原始碼來解決,這點工作就留給大家了。 

不過令人高興的是,反過來卻可以!即:如果在asp.net上登入了,認證和授權資訊在flash裡能識別,通常情況下,這已經能滿足絕大多數需要了。

漫談認證與授權

認證與授權一直以來都是很多人在討論的話題,之所以想這次談一談認證和授權,主要是因為最近看到許多文章都把認證和授權混為一談,把認證方式當作是授權方式。所以想寫篇文章談談我眼中的認證與授權 什麼是認證?認證是乙個嘗試解決我是誰的問題的過程。以乙個 http 請求為例,認證就是嘗試從請求資訊中獲取使用者資...

spring security 認證與授權

1 引入 spring security 模組 org.springframework.boot groupid spring boot starter security artifactid dependency role form class form div action login meth...

Spring security認證與授權 四

在第三個例項基礎上我做了第四個例項,這個例項很簡單。預設情況下,角色名稱必須以role 開頭,否則spring security框架無法識別,有時這會讓人覺得很不爽。當然,這是可以改變的。第四個例項 就是這一行 property name roleprefix value auth 你可以將字首修改...