2012-11-20 144 views
1

我試過尋找這個,找不到任何東西。adfs windows身份驗證

我希望用戶擁有真正的SSO體驗。這意味着他們登錄到他們的計算機上,當他們訪問我們在ADFS中建立的一個Web應用程序時,他們直接進入該網站。現在不管他們被帶到ADFS表單登錄頁面。如果用戶尚未連接到網絡,我們只希望顯示錶單登錄頁面。否則,ADFS應該認識到用戶在網絡上並使用Windows身份驗證。

我必須在ADFS中更改以實現此目的?

回答

2

在web.config中ADFS,你有什麼順序:

<localAuthenticationTypes> 
    <add name="Integrated" page="auth/integrated/" />  
     <add name="Forms" page="FormsSignIn.aspx" /> 
     <add name="TlsClient" page="auth/sslclient/" /> 
     <add name="Basic" page="auth/basic/" /> 
</localAuthenticationTypes> 

在頂部窗體?

這些用戶在互聯網或內聯網上嗎?

您是否使用ADFS代理?

+0

我想補充說,名稱解析也可能在這裏發揮作用。如果用戶在corpnet上嘗試訪問adfs服務器時無法使用內部IP地址找到adfs服務器,則他們可能會從外部解析adfs ip地址並觸發adfs代理(假設實施代理)。在http://msdn.microsoft.com/en-us/library/ee895365.aspx中提到的在wauth參數中指定urn:oasis:names:tc:SAML:1.0:am:password的身份驗證方法也將實現相同事情。 – maweeras

0

一個選項是通過將代碼置於本段落下方的代碼中,爲RedirectingToIdentityProvider事件添加處理程序。這使您有機會在瀏覽器重定向到ADFS之前跳入,並修改請求(查詢字符串)的外觀。你可以這樣做來指定認證類型或家庭領域(如果你有多個聯合會並且想跳過HRD),並且可能還有很多我不知道的其他東西。

void Application_Init() 
    { 
     FederatedAuthentication.WSFederationAuthenticationModule.RedirectingToIdentityProvider += new EventHandler<RedirectingToIdentityProviderEventArgs>(WSFederationAuthentication_RedirectingToIdentityProvider); 
    } 

那麼你會代碼添加到您的處理程序,可能是這個樣子:

void WSFederationAuthentication_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e) 
{ 
WSFederationAuthenticationModule instance = FederatedAuthentication.WSFederationAuthenticationModule; 
SignInRequestMessage request = instance.CreateSignInRequest(Guid.NewGuid().ToString(), instance.Realm, true); 
request.AuthenticationType = "urn:federation:authentication:windows"; 
Response.Redirect(request.WriteQueryString()); 
} 

當你request.AuthenticationType設置爲該值,你告訴你想要做的ADFS windows(集成)認證。這就是我所需要的所有工作。我不必擔心會按照nzpcmad的建議切換web.config中的身份驗證類型的順序。

此外,爲了使這項工作,IIS和您的網絡瀏覽器正在AD FS和您的依賴方之外工作,所以在IE中,您的用戶必須轉到工具> Internet選項>安全性,然後將該網站添加到您的本地Intranet網站。可能有辦法通過組策略或其他方法來解決這個問題,但這是另一個問題。無論如何,現在我想到了,這可能是你錯過的唯一一步。

+0

通過編輯Web.config可以達到同樣的效果: