對認證與授權沒啥概念的新同學,建議先看下 .net中的認證(authentication)與授權(authorization),然後再繼續。
flash/flex在通過fluorinefx呼叫.net中的方法時,同樣也會遇到認證與授權問題,即:
「是否隨便乙個阿貓阿狗都能來呼叫我的方法?」或者可以理解為:「呼叫我的方法前是否需要登入?」 這就是認證
「門衛放進來後,是不是不管什麼身份的人,都能來拿東西?」或者可以理解為:「登入後的使用者,具備何種資格的人才能呼叫方法?」 這就是授權
步驟:1、先建立自己的logincommand類(相當於門衛,用於把關):demologincommand
using system.collections;2、再建立乙個不需要認證就能隨便呼叫的遠端服務 demologinserviceusing system.security.principal;
using fluorinefx.security;
namespace _04_authentication
); return principal;
}else //檢驗不通過的處理}}
}
using system;3、為了對比,再來建立乙個需要認證的遠端服務:demosecureserviceusing system.collections.generic;
using system.linq;
using system.web;
using fluorinefx;
namespace _04_authentication
//同樣,這裡方法的名字其實也可以隨便起
public bool logout()}}
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不需要登入就能呼叫,而其它服務呼叫時要受到"privileged-users"的限制,那麼這個限制到底如何描述的呢?*_04_authentication.demologinservice
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 你可以將字首修改...