2012-08-16 88 views
0

我試圖在不同的web應用程序(asp.net應用程序和MVC4應用程序)之間共享身份驗證和授權。應用程序之間的共享身份驗證

我讀過,你應該設置機器的關鍵和這些值是相同的站點之間。我已經完成了這項工作,認證工作正常。

但是現在在MVC應用程序中,我想使用Authorize屬性來確保用戶只能看到應該看到的內容。這不起作用。

我也檢查過。

當我從ASP.Net應用程序(這是登錄完成的地方)調用User.IsInRole(「Admin」)時,返回的值爲true,但當瀏覽到MVC應用程序時,同一個調用返回false。

似乎角色沒有在整個應用程序中共享,是否有可能得到工作或應該我創建一個自定義的授權屬性?

感謝davance

回答

1

你有越多的應用,更棘手的是分享形式的cookie。最終,如果兩個應用程序位於不同的域(something.foo.comsomethingelse.bar.com),則無法強制瀏覽器向兩個不同的域提交cookie。

只有手動控制您的表單cookie併爲.yourdomain.com頂級域名發佈並且您的子應用在您的子域(app1.yourdomain.com,app2.yourdomain.com)中時,此功能纔有效。這可能是一個嚴重的限制。

您可以做的是將您的身份驗證外部化,即創建一個單獨的Web應用程序,其唯一目標是對用戶進行身份驗證和授權。您可以選擇單點登錄協議(WS-Federation,OAuth2,OpenID)之一,並圍繞此身份驗證提供程序聯合您的應用程序環境。

這聽起來可能聽起來很困難,特別是如果這對你來說是新生事物,但如果你花時間,那就只有好處。

+0

我懷疑應用程序將在單獨的域。你現在有辦法將角色傳遞給第二個應用程序嗎? – Captain0 2012-08-16 08:01:43

+0

是的。訣竅在於,當您創建表單Cookie時,您可以以「role1 | role2 | ...」的形式將角色存儲在表單cookie的userdata部分。然後你提供你自己的角色提供者,它從表單cookie的userdata部分讀取角色。這樣,如果你的應用程序共享窗體cookie,他們也共享角色。 – 2012-08-16 08:09:44

+0

您是否認爲WIF是在此解決方案上實施單點登錄的方式? – Captain0 2012-08-16 09:30:20

相關問題