簡體   English   中英

ASP.NET為下游WCF身份驗證和授權形成身份驗證

[英]ASP.NET Forms Auth For Downstream WCF Authentication and Authorization

開發環境:帶有Visual Studio 2010的.NET 4.0的Windows 7企業版

生產環境:帶有IIS 7.0的Windows 2008 Server

我試圖找出對WCF服務進行身份驗證和授權的最佳方法,該服務運行在與ASP .NET Web應用程序不同的安全區域中的另一台計算機上。

用戶使用我們存儲在數據庫中的憑據使用用戶名和密碼登錄。 我們沒有實現成員資格提供程序,但是當用戶的憑據通過芥末時,我們將使用用戶ID手動創建Forms Auth票證。

我確實推出了自己的實現RoleProvider的Role Provider。 因此,我們具有“標准” ASP .NET角色以及在我們的ASP .NET Web應用程序上工作的表單身份驗證票。

我需要做的是以某種方式將這些憑據傳遞給位於另一台計算機上的WCF服務。 最初,我以為我可能會使用Windows Identity Foundation並創建自定義安全令牌服務(STS)。 基本上,如果用戶進行身份驗證,則創建一個令牌,並將基於聲明的授權與用戶身份一起添加到令牌中,然后將其傳遞給WCF服務。

我們當前使用的是.NET Remoting服務(.NET 1.1時間范圍),該服務根本不進行身份驗證或授權。

似乎有些矯kill過正,因為當您創建Forms Auth憑單時,可能有一種方法可以簡單地傳遞我當前與用戶之間的信息,我知道當前IPrinciple是通過IIdentity設置的, “名稱”屬性設置為Thread.CurrentIdentity上的用戶ID。

我很確定IsInRole(“ WhateverRole”)在這一點上也可以正常工作,但是所有這些都在Web應用程序方面。 什么都不會傳遞給.NET Remoting服務。

看這兩個類:
AuthenticationService類別
ServiceAuthorization類
我認為他們不是我想要的。 同樣,我已經閱讀了Michele Bustamante的Learning WCF ,但我並沒有真正看到這種特殊情況。 當我閱讀有關Windows身份驗證的信息時 ,我一直認為需要將其綁定到一些與內部Windows安全情況相關的內部NTLM或Kerberos。 我們的用戶都不是內部用戶。 他們嚴格是外部的。

現在,我知道,如果用戶獲得了Forms Auth票證,那么他們實際上將獲得有效的IPrinciple,並且應該設置角色,對嗎?

如果是這樣,是否有辦法將其傳遞給另一台計算機上的WCF服務設置? 如果我將WCF clientCredentialType設置為Windows,並且將serviceAuthorization PrinciplePermissionMode設置為“ UseAspNetRoles”,那么在進行服務調用時,這些安全性上下文將從Web應用程序傳遞到WCF服務中嗎?

我找不到什么可能發生的事情。 謝謝。

我認為您想要的是:

http://thoughtenedarchitecture.blogspot.com/2009/10/flowing-aspnet-forms-authentication.html

這不是超級安全,因為您可以有效地創建自己的中間人攻擊,但是對於大多數需求而言,它可能足夠安全。

本質上可以歸結為:

  1. 使用相同的MachineKey配置兩個服務器
  2. 從用戶請求中獲取FormsAuthentication cookie
  3. 將Cookie附加到傳出的WCF服務調用
  4. ???
  5. 利潤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM