熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

單點登錄在ASP.NET上的簡單實現[2]

2013-11-13 11:00:15  來源: .NET編程 
    代碼分析

  從上面的流程中我們可以看出系統中Shop和Office的代碼是完全類似的只要Shop可以實現Office也可以同樣的克隆所以我們的重點分析的對象是Shop和Service的代碼

  Shop的Webconfig和Projectcs

  在Shop的Webconfig裡我們配置了Service站點和Shop站點以方便我們在部署時方便修改

<appsettings>
<add key=Service value=http://localhost: />
<add key=WebSite value=http://localhost: />
</appsettings>
  在Project類裡進行引用

using System;
using SystemConfiguration;

namespace AmethystureSSOShop
{
 public class Project
 {
  public static string Service = ConfigurationSettingsAppSettings[Service];
  public static string WebSite = ConfigurationSettingsAppSettings[WebSite];
 }
}
  Shop的Globalcs

  Shop的Globalcs定義了四個Session變量UserID用來標識用戶身份Pass標識用戶即時狀態Security用於保存往來Service和Shop的通訊不是被仿冒的Url保存了上次請求的頁面以保證在用戶登錄後能轉到用戶請求的頁面

protected void Session_Start(Object sender EventArgs e)
{
 thisSessionAdd(UserID );
 thisSessionAdd(Pass false);
 thisSessionAdd(Security );
 thisSessionAdd(Url );
}
  Shop的Anycs

  Shop的Anycs並沒有包含代碼因為Any類從Page繼承而來為了代碼分析方便我們將代碼集中到Pagecs中

using System;
using SystemWeb;

namespace AmethystureSSOShop
{
 public class Any : AmethystureSSOShopPage
 {
 }
}
  Shop的Pagecs

  Page類有兩個方法CustomerValidate和InitializeCustomerValidate用戶檢查用戶的即時狀態而Initialize是頁面登錄後發送給用戶的信息我們的重點是CustomerValidate

  CustomerValidate是一個非常簡單的流程用條件語句檢查Pass的狀態如果Pass為否則表示用戶沒有登錄頁面跳轉到Service的Validate頁面中我們要分析的是其中保存的Url和遞交的WebSite和Security幾個參數Url的作用在前面已經講清楚了只是為了保證用戶登錄後能回到原來的頁面而WebSite是為了保證該站點是被Service所接受的並且保證Service知道是哪個站點請求了用戶即時狀態因為這個例子是個簡單的例子在後面的Validate裡沒有驗證WebSite是否是接受的請求站點但是在實際應用中應該驗證這一點因為Shop和Service等同於服務器和客戶端服務器出於安全考慮必須要檢查客戶端是否是被允許的Security是非常重要的一點Shop對Service發送的是請求不需要保證該請求沒有被篡改但是在Service應答Shop請求時就必須要保證應答的數據沒有被篡改了Security正是為了保證數據安全而設計的

[]  []  []  []  []  


From:http://tw.wingwit.com/Article/program/net/201311/14961.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.