2014-02-25 38 views
19

我正在C#中開發MVC 4 Web應用程序,並且想要使用現有的SAML 2.0身份提供程序處理登錄。我正在使用HTTP POST bindingSimpleSAMLphp。我想應該使用。首先,我試圖安裝Identity and Access Tool。 (我正在使用Visual Studio 2013,它應該集成了此工具,但是VS2013的版本爲doesn't support "re-entrancy",這意味着我無法使用它將WIF支持添加到我的現有應用程序中。)我應該如何在ASP.NET MVC 4服務提供者中實現SAMLP 2.0?

指向標識和訪問工具我的身份提供者的元數據,我得到這個錯誤信息:

userSelection.SecurityTokenServiceMetadata.SecurityTokenServiceDescriptor

顯然,這是指示SAMLP 2.0 is not supported by WIF錯誤消息。這似乎與支持的SAML 2.0 令牌不同(至少此outdated documentation表示存在Microsoft.IdentityModel.Tokens.Saml2名稱空間)。

然後我發現了WIF Extension for SAML 2.0。然而,這是在2011年5月發佈的,從那以後似乎並沒有被觸及。儘管如此,我下載了擴展並嘗試構建ZIP文件中包含的SamlConfigTool。該工具是一個控制檯應用程序,通知我:

此工具將提示創建描述依賴方的元數據文件所需的信息。它會提示輸入合作伙伴元數據文件的地址。最後,它將輸出一個名爲Changes_To_Web_Config.xml的文件,其中應該對您的網站的web.config文件進行更改以啓用SAML保護。

在輸入我的實體ID和SAML端點後,SamlConfigTool立即崩潰。好的,也許我不需要使用配置工具,我可以複製示例ServiceProvider VS項目中完成的工作。遷移之後,我可以在VS2012中打開項目,但我不清楚它是如何工作的 - 它似乎沒有包含任何C#代碼,只是Web.config中的新條目。我不清楚我應該如何調整這個配置來替換我的MVC 4應用程序中的自定義登錄代碼,並且在任何情況下依賴3年前的死亡庫都不是一個好主意。

那麼,在ASP.NET MVC 4中實現SAML 2.0的最佳方式是什麼?我目前正在手動解碼,編碼,解析和壓縮XML,感覺應該有更簡單的方法。

回答

16

你說得對,WIF(現在被移到核心.NET System.IdentityModel下)只支持SAML2令牌,而不是實現服務供應商所需的SAML2協議

Kentor.AuthServices是構建在.NET 4.5之上的ASP.NET MVC的開源SP實現。安裝軟件包並在web.config中添加一些設置 - 不需要編碼。

免責聲明:我的Kentor.AuthServices

+0

我已經安裝了AuthServices和在我的'Web.config'中添加了[適當的部分] [1],並且我的項目仍在構建中,但我無法讓AuthServices執行任何操作。將'[Authorize]'屬性添加到我的'ActionResult'中似乎沒有任何作用。 – sjy

+0

嘗試使用http:// yoursite/AuthService/SignIn。它應該開始登錄(我顯然需要用MVC的東西來更新文檔)。要獲得自動重定向,請將auth模式設置爲forms並將loginUrl設置爲〜/ SignIn:http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.loginurl(v=vs.110)。 aspx –

+1

你的意思是AuthServices/SignIn加上「S」 – JDPeckham

3

據我所知在WIF中尚不支持SAML2P。我建議你自己實現它。

您可以使用實現SAML2P的庫並在您的MVC項目中使用它。您可以使用的一些庫是OIOSAML.NET或商業ComponentPro SAML

或者有一個選項可以設置中間IAM。在MVC中,您使用ws- *協議(在visual studio中實現的標準方式)將ideneity provider設置爲此中間IAM。應將此IAM配置爲將您的身份驗證消息轉發給您要與SAML2P一起使用的IDP。在對用戶進行身份驗證之後,IAM只會轉換聲明併發布您的MVC應用程序信任的新令牌。試着看看ShibbolethThinkTecture IdentityServer v2(但第二個沒有實現SAML2P,所以你必須自己添加支持)。或者你可以使用ADFS2。

+0

至於第三方服務,還有支持samlp的[Auth0](https://auth0.com)。 – woloski

+2

據我所知.Net 4.5確實支持samlp:https://connect.microsoft.com/VisualStudio/feedback/details/781848/net-4-5-windows-identity-foundation-should-include-samlp-支持 – surfmuggle

+0

調查中這39個ups中的一個是我的:)我也想要是否支持它,但直到今天,我還沒有在.NET框架中發現它的官方參考。但是Azure和ADFS支持它。 – pepo

1

除非你想自己動手寫你需要一個庫,作者。我一直在使用https://www.nuget.org/packages/ITfoxtec.Saml2.Mvc

+0

你覺得怎麼樣?我們正在評估不同的軟件包,並且ITfoxtec位於短名單之上 –

+0

我們現在正在生產它。請注意,ITFoxtec經歷了重寫,而且我們仍在使用舊版本。由於我們特定的IdP實現的具體情況,我們不得不做一些小修改,因此可以使用源代碼很好。 –

+0

謝謝。很高興知道。我喜歡它的許可證類型和開源代碼。可能很快評估其質量:) –

相關問題