2012-11-23 68 views
2

背景(這可能從我之前詢問的關於DNOA的衆多問題中可以看出):我正在開發一個運行在我的僱主Intranet上的Web應用程序門戶。但是,由於這是一個內聯網,所有各種依賴方(以及提供商)的url都是這樣的:http://servername/path;特別是缺少一個TLD。避免dotnetopenauth網址中的「必須包含句點」限制

這段代碼在DotNetOpenAuth(UntrustedWebRequestHandler.IsUriAllowable(Uri uri))進行以下檢查:

if (!uri.Host.Contains(".")) { 
    return failsUnlessWhitelisted("it does not contain a period in the host name."); 
} 

顯然,因爲我所有的RP的都是簡單的,沒有頂級域名全部失敗該檢查服務器名稱。 現在,我意識到我可以將它們全部添加到web.config白名單(我已經嘗試了幾次,它按預期工作),但看到作爲新的服務器將動態添加我不認爲這是一個理想解決方案

所以我的問題是:我應該試圖動態修改web.config? (我在這方面進行的初步研究表明這將是一個痛苦) 或者,有沒有辦法以編程方式設置白名單?

回答

1

不幸的是,沒有編程方式來修改主機白名單。

如果您處於信任環境中,可以規避UntrustedWebRequestHandler類,並使用不包含主機名檢查(或檢查它是否與您需要的任何策略匹配)的Web請求處理程序。有一個內置的DotNetOpenAuth.Messaging.StandardWebRequestHandler,你可以使用這是一個直接傳遞(不添加任何額外的網絡級別的安全檢查),如果你信任所有的服務器,你會問DotNetOpenAuth連接到的建議。

var rp = new OpenIdRelyingParty(); 
rp.Channel.WebRequestHandler = new StandardWebRequestHandler(); 

var op = new OpenIdProvider(); 
op.Channel.WebRequestHandler = new StandardWebRequestHandler(); 

如果要應用一些更加謹慎的政策(也許有白名單的主機的一些集中式列表),你可以自己實現IDirectWebRequestHandler,並且可以使用the existing UntrustedWebRequestHandler class for inspiration if necessary。然後,將上述屬性設置爲您自己的實現。